Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
二进制翻译 #包括 int main(){ 无符号字符数据[1]; 文件*f=fopen(“bill.jpg”、“rb”); 而(!feof(f)){ 如果(fread(数据,1,1,f)>0){ printf(“0x%02x\n”,数据[0]); } } fclose(f); }_C_File_Binary_Io_Hex - Fatal编程技术网

二进制翻译 #包括 int main(){ 无符号字符数据[1]; 文件*f=fopen(“bill.jpg”、“rb”); 而(!feof(f)){ 如果(fread(数据,1,1,f)>0){ printf(“0x%02x\n”,数据[0]); } } fclose(f); }

二进制翻译 #包括 int main(){ 无符号字符数据[1]; 文件*f=fopen(“bill.jpg”、“rb”); 而(!feof(f)){ 如果(fread(数据,1,1,f)>0){ printf(“0x%02x\n”,数据[0]); } } fclose(f); },c,file,binary,io,hex,C,File,Binary,Io,Hex,是这样吗?我很担心,因为如果我使用hextump查看文件,我会得到完全不同的输出。这将正确地以十六进制打印文件的第一个字节 检查所用hextump实用程序的文档,或者告诉我们正在使用哪个平台。一些转储实用程序在每一行上以相反的顺序显示字节,以便在您理解它的工作后,使little endian的读取更加直观。对不起,但是没有--,而(!feof(f))基本上总是错误的,它通常会读取文件中的最后一项两次。这是我几年前写的一个合理可用的十六进制转储程序: #include <stdio.h>

是这样吗?我很担心,因为如果我使用hextump查看文件,我会得到完全不同的输出。

这将正确地以十六进制打印文件的第一个字节

检查所用hextump实用程序的文档,或者告诉我们正在使用哪个平台。一些转储实用程序在每一行上以相反的顺序显示字节,以便在您理解它的工作后,使little endian的读取更加直观。

对不起,但是没有--
,而(!feof(f))
基本上总是错误的,它通常会读取文件中的最后一项两次。这是我几年前写的一个合理可用的十六进制转储程序:

#include <stdio.h>

int main() {
  unsigned char data[1];

  FILE *f = fopen("bill.jpg", "rb");

  while (!feof(f)) {
    if (fread(data, 1, 1, f) > 0) {
      printf("0x%02x\n", data[0]);
    }
  }
  fclose(f);
}
/*Jerry Coffin的公共领域,使用MS C 10.0和BC 4.5进行测试
*/
#包括
#包括
int main(int argc,字符**argv){
无符号长偏移量=0;
文件*输入;
int字节,i,j;
无符号字符缓冲区[16];
煤焦突出剂[60];
如果(argc<2){
fprintf(stderr,“\n用法:转储文件名[文件名…]”);
返回退出失败;
}

对于(j=1;jBut这里,
feof
基本上是多余的,而不是遭受最后两次打印错误的影响,尽管原始代码确实检查了
fread
@Charles的返回值——对,在这种情况下,错误是隐藏的(或者至少其影响是隐藏的).是的,我确实注意到它是向后的;你知道它为什么这样做吗?我可以想象这会让人非常困惑。在80x86、VAX等小端机上,它使解释一系列形成较大数量的字节更直观。例如,值1000是0x3e8。32位寄存器中的值看起来像
00 00 03 e8
,但当作为32位值存储在内存中时,最低有效字节位于最低地址,因此按标准递增顺序查看字节会显示
e8 03 00
。换行的转储程序显示多字节值更自然。完全是一个位OTT,它是向后的(如下所述)
/* public domain by Jerry Coffin, tested with MS C 10.0 and BC 4.5
 */
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
    unsigned long offset = 0;
    FILE *input;
    int bytes, i, j;
    unsigned char buffer[16];
    char outbuffer[60];

    if ( argc < 2 ) {
        fprintf(stderr, "\nUsage: dump filename [filename...]");
        return EXIT_FAILURE;
    }

    for (j=1;j<argc; ++j) {

        if ( NULL ==(input=fopen(argv[j], "rb")))
            continue;

        printf("\n%s:\n", argv[j]);

        while (0 < (bytes=fread(buffer, 1, 16, input))) {
            sprintf(outbuffer, "%8.8lx: ", offset+=16);
            for (i=0;i<bytes;i++) {
                sprintf(outbuffer+10+3*i, "%2.2X ",buffer[i]);
                if (!isprint(buffer[i]))
                    buffer[i] = '.';
            }
            printf("%-60s %*.*s\n", outbuffer, bytes, bytes, buffer);
        }
        fclose(input);
    }
    return 0;
}