2016-11-17 8 views
-1

私はテキストファイルを読み込み、各文字の数値のASCII値を見つけて16進数に変換して画面に出力するC++プログラムを作成していますが、16進数'C'で終わる値が現れます。ここで ASCIIを16進数に変換すると、ランダムな改行が表示されるのはなぜですか?

Screenshot of console output

は、私が16進数に変換するために使用していたコードです:

std::string HexConvert(char character) { 
    char HEX[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; 
    int ASCII = (int) character; 
    if (ASCII > 255 || ASCII < 32) { 
     return "20"; 
    } else { 
     std::vector<char> binaryVec = binaryConvert(ASCII); 
     std::string binaryVal(binaryVec.begin(), binaryVec.end()); 
     binaryVal = binaryVal.substr(binaryVal.length() - 8, 8); 
     std::string bin1 = binaryVal.substr(0, 4); 
     std::string bin2 = binaryVal.substr(4, 4); 
     int hex1 = ((bin1[0] - 48)*8) + ((bin1[1] - 48)*4) + ((bin1[2] - 48)*2) + ((bin1[3] - 48)*1); 
     int hex2 = ((bin2[0] - 48)*8) + ((bin2[1] - 48)*4) + ((bin2[2] - 48)*2) + ((bin2[3] - 48)*1); 
     char hexVal[2] = { HEX[hex1], HEX[hex2] }; 
     std::string hexValue(hexVal); 
     return hexValue; 
    } 
} 
+0

テキストの画像を投稿しないでください。 –

答えて

2

それは単に考え出すのではなく、全部をスクラップし、正しい方法をHexにASCIIを変換するために高速です不具合。

std::ostringstream o; 

o << std::hex << std::uppercase << std::setw(2) << std::setfill('0') << ASCII; 

return o.str(); 
+0

他の#includesがこのストリームに必要ですか? – SNB

+0

あなたは ''と ''が必要ですが、他の何かが必要とは思わないでください。疑問がある場合は、C++リファレンスマニュアルを確認してください。 –

+0

std :: fillが好きではないようです - 3つの引数が必要ですが、1つしか与えられないと言います。 – SNB

0

文字列の終端ヌルバイトを忘れてしまった。

char hexVal[3] = { HEX[hex1], HEX[hex2], 0 }; 

未定義のビヘイビアが実行されていました。何かが起こった可能性があります。

関連する問題