画像をバイナリとして開いたのちにそのバイナリ列と16進文字列を相互変換するプログラムを書いています。ここで問題なのが、バイナリ列から16進文字列への変換をしたのち、再びバイナリ列に戻してファイルに書き出すとサイズが半分になってしまいます。どこがおかしいのかわからなくなってしまったためアドバイスをお願いしたいです。参考にしたサイトはこちらです。
ソースを掲載いたします。第一引数からファイル名を読み、そのファイルと同じものをoutputという名前で書き出します。
C++
#include <stdio.h> #include <fstream> #include <sstream> #include <iostream> #include <string> #include <string.h> #include <iterator> using namespace std; void BytesFromHexString(const char* str) { int len = (int)strlen(str); std::cout << len << std::endl; unsigned char data[len / 2]; ofstream wf; wf.open("output", ios::trunc); for (int i = 0; i < len; i+=2) { unsigned int x; sscanf((char *)(str + i), "%02x", &x); data[i/2] = x; wf << data[i/2]; } } int main( int argc, char *argv[] ) { std::ifstream ifs(argv[1], std::ios::binary); if (ifs.fail()) { std::cerr << "失敗" << std::endl; return -1; } std::string str((std::istreambuf_iterator<char>(ifs)), std::istreambuf_iterator<char>()); std::string destination; for(int i = 0; i < (int)str.size(); ++i){ char buffer[2]; snprintf(buffer, sizeof(buffer), "%02x", (unsigned char)str[i]); destination = destination + buffer; } BytesFromHexString((const char*) destination.c_str()); return 0; }
まだ回答がついていません
会員登録して回答してみよう