2013-09-30 5 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

Спасибо! Это работало очень хорошо. –

Смежные вопросы