【发布时间】:2017-01-14 16:36:06
【问题描述】:
我正在尝试从二进制文件中读取一个简单的结构,并将其转换为十六进制。
我在尝试将内容打印到窗口中时遇到了问题。 “块”数据是一大块,所以我希望它会在第一个 printf 的窗口中打印很多二进制文件,然后为第二个 printf 打印十六进制。但是,它只打印一行 int 绝对不是它应该是的十六进制(它应该是一个很长的字符)
我想知道我做错了什么?我是否必须在每个字节上迭代一个 while 循环并将其转换为 byte_array 在六边形之前?还是我的类型错了?
这是我的代码:
void myChunks(){
struct chunkStorage
{
char chunk; // ‘Chunk of Data’
};
unsigned long e;
FILE *p;
struct chunkStorage d;
p=fopen(“myfile.txt”,”rb");
fread(&d.chunk,sizeof(d.chunk),1,p);
printf(d.chunk);
e = hex_binary(d.chunk);
printf(e);
fclose(p);
}
int hex_binary(char * res){
char binary[16][5] = {"0000", "0001", "0010", "0011", "0100", "0101","0110", "0111", "1000", "1001", "1010", "1011", "1100", "1101", "1110","1111"};
char digits [] = "0123456789abcdef";
const char input[] = ""; // input value
res[0] = '\0';
int p = 0;
int value =0;
while(input[p])
{
const char *v = strchr(digits, tolower(input[p]));
if(v[0]>96){
value=v[0]-87;
}
else{
value=v[0]-48;
}
if (v){
strcat(res, binary[value]);
}
p++;
}
return res;
//printf("Res:%s\n", res);
}
【问题讨论】:
-
您误解了“二进制”的含义。
-
int hex_binary(char * res){...return res;}...???? o.O -
你介意给我们一些输入文件的例子和输入的预期输出吗?
-
检查
v是否不是NULL之后 阅读v[0]没有多大意义。取消引用空指针会调用 未定义的行为。 -
myChunks()中的问题是您将chunkStorage声明为具有单个 字符chunk作为成员。 (如果你曾经费心打电话给myChunks(),你fread1-byte 到d.chunk。那么你怎么会期望来自1-byte的长字符串呢?尽管事实上你从不显示myChunks()在您的代码中实际被调用。