fread 读取十六进制
时间: 2023-07-03 21:11:17 浏览: 231
fread 函数读取的是二进制数据,无论是什么进制表示的数据都可以读取。如果你要读取十六进制数据,可以先将十六进制字符串转换成二进制数据,然后再使用 fread 函数读取。
以下是一个示例程序,演示了如何读取十六进制数据:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int hex_to_bin(char c) {
if (c >= '0' && c <= '9') {
return c - '0';
} else if (c >= 'a' && c <= 'f') {
return c - 'a' + 10;
} else if (c >= 'A' && c <= 'F') {
return c - 'A' + 10;
} else {
return -1;
}
}
int hexstr_to_bin(const char *hexstr, unsigned char *bin, size_t len) {
size_t i;
for (i = 0; i < len; i++) {
int high = hex_to_bin(hexstr[i * 2]);
int low = hex_to_bin(hexstr[i * 2 + 1]);
if (high < 0 || low < 0) {
return -1;
}
bin[i] = (unsigned char) ((high << 4) | low);
}
return 0;
}
int main() {
const char *hexstr = "48656c6c6f20576f726c64"; // "Hello World" 的十六进制表示
unsigned char buffer[30];
if (hexstr_to_bin(hexstr, buffer, sizeof(buffer)) < 0) {
printf("Invalid hex string\n");
return -1;
}
size_t num_read = fread(buffer, sizeof(unsigned char), strlen(hexstr) / 2, stdin);
printf("Read %zu bytes: %.*s\n", num_read, (int) num_read, buffer);
return 0;
}
```
该程序先将十六进制字符串转换成二进制数据,然后使用 fread 函数从标准输入读取相应的字节数。注意,读取的字节数应该与十六进制字符串的长度相同,因为每两个十六进制字符对应一个字节。
阅读全文