2013-09-30 43 views
1

我敢肯定這是一個簡單的問題,但我試圖輸出文件(本例中爲* .bmp)中每個字節的十六進制值。我已成功將文件加載到內存中,並且能夠打印十六進制字節值。但是當我打印某些字節時,當我打印某些字節時,例如第三個字節(在偏移量2處),它會打印FFFFFFE6,但是我的hexdump(使用HxD)表示它只是E6。這隻發生在某些字節上,其他字體打印得很好。C++ - 奇怪格式的十六進制輸出

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

嘗試使memblock一個'無符號字符*'。 –

+1

@Deanie I(和[其他人](http://meta.stackoverflow.com/q/325790/3266847))看到您正在進行大量編輯,清理C/C++標記。這本身就是一件好事,但如果你做了一個編輯,確保它是重要的,也就是說,改進所有改進的內容,而不是隻刪除一個標籤。這篇文章的標題標題是[它可能不屬於](http://meta.stackexchange.com/questions/19190/should-questions-include-tags-in-their-titles),還有第一段中有一些錯別字,你應該修正。 –

回答

6

你需要了解如何變量參數和standard integral conversions工作。當你char簽名時,你遇到了麻煩。

始終打印字節無符號字符:

char data[100]; 

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

謝謝!這工作得很好。 –