文件读错误

时间:2012-03-08 00:21:18

标签: c

我正在从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结尾。我读错了文件吗?

1 个答案:

答案 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;
}