当前位置:  开发笔记 > 编程语言 > 正文

使用C将十六进制值存储到数组后打印十六进制值

如何解决《使用C将十六进制值存储到数组后打印十六进制值》经验,为你挑选了1个好方法。

我已经从文件中读取并存储为十六进制值(比如第一个值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它们是相同的,但是向代码的读者提供了更多信息(说"这是二进制数据而不是字符串").

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有