我编写了一个程序将数字写入二进制文件,代码如下:
u_int16_t N=150;
u_int16_t seed=3;
FILE * outfile, *infile;
outfile=fopen("tempfile","wb");
//write these 2 16-bit numbers into binary file
fwrite(&seed, 2, 1, outfile);
fwrite(&N, 2, 1, outfile);
infile=fopen("tempfile","rb");
if(infile==NULL) fputs("Fire error\n",stderr);
//get the size of the file
fseek(infile,0,SEEK_END);
int lsize=ftell(infile);
rewind(infile);
u_char * temp2=(u_char*)malloc(lsize);
if(temp2==NULL) printf("temp2 error allocation\n");
fread(temp2,1,lsize,infile);
for(i=0;i<lsize;i++)
printf("%x",temp2[i]);
printf("\n");
fclose(infile);
free(temp2);
结果是:
30960
所以3打印为30
,这是小端
虽然150打印为960
,但有一个ad 0
,实际上是0x96=150
,所以它是大端
为什么3
和150
的字节顺序不同,为什么会有额外的0
?
谢谢!
答案 0 :(得分:4)
当你这样做时
printf("%x",temp2[i]);
在十六进制数字中具有前导零的字节将打印,而为零。这意味着,例如0x03
等数字将打印为3
。
通过向文件写入四个字节非常明显,但打印输出中只有五个十六进制数字(提示:四个字节是八个十六进制数字)。
相反,例如。
printf("%02x",temp2[i]);