我正在从txt文件中读取字节流。例如:01000101 = 4个字节。
FILE *file;
char buffer_msg[100] = { '0' };
char line[100] = { '0' };
file = fopen("name.txt",'r');
if(file!=NULL)
{
while(fgets(line, sizeof(line), file)!=NULL)
{
strcpy( buffer_msg, line);
}
}
然后我将这个buffer_msg传递给一个函数。现在,当我在eclipse中调试,并查询buffer_msg的内存时,它将4字节数据读取为3031 3030 3031 3031.我的猜测是以该格式读取我的数据0001 0000 0001 0001。任何人都可以告诉我们发生了什么吗?我想文本文件以\ r \ n结尾。我读错了文件吗?
答案 0 :(得分:0)
而不是strcpy
,你需要这样的东西:
void parse(char *buffer, char *line) {
while (*line) {
*buffer++ = (hex2char(line[0]) << 4) + hex2char(line[1]);
line += 2;
}
}
这将从line
获取两个字节,将十六进制数字转换为整数并将其存储为buffer
的一个字节。
这适用于hex2char:
char hex2char(char digit) {
if (digit >= '0' && digit <= '9') {
return digit - '0';
} else if (digit >= 'A' && digit <= 'F') {
return digit - 'A' + 10;
} else if (digit >= 'a' && digit <= 'f') {
return digit - 'a' + 10;
}
return -1;
}