char a,b; FILE *outFp, *inFp; inFp=fopen("./config/SAM","rb+"); if(inFp==NULL){ printf("open in file error!\n"); return 0; } for(int i=0;i<120;i++) { fread(&a,sizeof(char),1,inFp); printf("%x ",a); } printf("\n"); fclose(inFp);这段代码主要使用来都一个二进制文件,并输出。原来的内容是:
%x不带符号。你这样试试
if (a < 0){ printf("-"); a = 0 - a ; }//加上这个。 printf("%x ",a);
######
%x不带符号。你这样试试
if (a < 0){ printf("-"); a = 0 - a ; }//加上这个。 printf("%x ",a);
printf
(
"%x "
,(unsigned char)a);
######
printf
(
"%x "
,(unsigned char)a);
http://code.google.com/p/srgb/source/browse/printHexString/main.cpp
void printHexStr(const void* buf , size_t size) { unsigned char* str = (unsigned char*)buf; char line[512] = {0}; const size_t lineLength = 16; // 8或者32 char text[24] = {0}; char* pc; int textLength = lineLength; for (size_t ix = 0 ; ix < size ; ix += lineLength) { sprintf(line, "%.8xh: ", ix); // 打印16进制 for (size_t jx = 0 ; jx != lineLength ; jx++) { if (ix + jx >= size) { sprintf(line + (11 + jx * 3), " "); // 处理最后一行空白 if (ix + jx == size) textLength = jx; // 处理最后一行文本截断 } else sprintf(line + (11 + jx * 3), "%.2X ", * (str + ix + jx)); } // 打印字符串 { memcpy(text, str + ix, lineLength); pc = text; while (pc != text + lineLength) { if ((unsigned char)*pc < 0x20) // 空格之前为控制码 *pc = '.'; // 控制码转成'.'显示 pc++; } text[textLength] = '\0'; sprintf(line + (11 + lineLength * 3), "; %s", text); } printf("%s\n", line); } }
######谢谢你的代码######我试了。代码本身没问题。不过你说的文件SAM。我无法进行COPY。说正在被别的程序使用。我尝试了另一个二进制文件,没有任何问题。 (当然我是用 "rb",不是“rb+")。你如果可以fopen SAM,如果还出现你说的问题。那么可以证明,这个文件本身在不停的被改写。我使用UE打开SAM,也出现文件共享错误,而禁止打开。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。