C ++ - 奇怪格式化的十六进制输出

时间:2013-09-30 13:02:10

标签: c++

我确定这是一个简单的问题,但我正在尝试输出文件中每个字节的十六进制值(在这种情况下为* .bmp)。我已成功将文件加载到内存中,并能够打印字节的十六进制值。但是当我打印某些字节时,当我打印某些字节时,例如第3个字节(偏移2),它会输出FFFFFFE6,但我的hexdump(使用HxD)文件说它只是E6。这只发生在某些字节上,其他字节打印得很好。

Main.cpp是:

#include "main.h"

int main () 
{
    ifstream::pos_type size;
    char * memblock;

    ifstream file ("C:\\hex.bmp", ios::in|ios::binary|ios::ate);

    size = file.tellg();

    memblock = new char [size];

    file.seekg(0, ios::beg);
    file.read(memblock, size);
    file.close();
    printf("%X", memblock[2]);

    delete[] memblock;

    cin.get();
}

Main.h是:

#ifndef MAIN_H
#define MAIN_H
#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;
#endif

1 个答案:

答案 0 :(得分:6)

您需要了解变量参数和standard integral conversions的工作原理。当您char签名后,您就遇到了麻烦。

始终将字节打印为 unsigned 字符:

char data[100];

printf("%02X", (unsigned char)data[i]);
//             ^^^^^^^^^^^^^^^