我已经从文件中读取并存储为十六进制值(比如第一个值D4 C3
).然后将其存储到char数据类型的缓冲区中.但每当我打印缓冲区时,我得到的值就像buff[0]=ffffffD4
; buff[1]=ffffffC3
等等.如何在不添加任何字节的情况下将实际值存储到缓冲区?附上此代码段
ic= (char *)malloc(1); temp = ic; int i=0; char buff[1000]; while ((c = fgetc(pFile)) != EOF) { printf("%x",c); ic++; buff[i]=c; i++; } printf("\n\nNo. of bytes written: %d", i); ic = temp; int k; printf("\nBuffer value is : "); for(k=0;k
Some program.. 5
问题是两件事的结合:
首先是当你将一个较小的类型传递给一个变量参数函数时,就像
printf
它被转换为一个int
,它可能包含符号扩展.第二个是格式
"%x"
您使用预计相应的参数是一个unsigned int
并把它当作这样的
如果要打印十六进制字符,请使用前缀
hh
,如下所示"%hhx"
.有关详细信息,请参阅此
printf
(和系列)参考.最后,如果您只想将读取的数据视为二进制数据,则应考虑使用
int8_t
(或可能uint8_t
)缓冲区.在任何具有8位的平台上,char
它们是相同的,但是向代码的读者提供了更多信息(说"这是二进制数据而不是字符串").
1> Some program..:问题是两件事的结合:
首先是当你将一个较小的类型传递给一个变量参数函数时,就像
printf
它被转换为一个int
,它可能包含符号扩展.第二个是格式
"%x"
您使用预计相应的参数是一个unsigned int
并把它当作这样的
如果要打印十六进制字符,请使用前缀
hh
,如下所示"%hhx"
.有关详细信息,请参阅此
printf
(和系列)参考.最后,如果您只想将读取的数据视为二进制数据,则应考虑使用
int8_t
(或可能uint8_t
)缓冲区.在任何具有8位的平台上,char
它们是相同的,但是向代码的读者提供了更多信息(说"这是二进制数据而不是字符串").