5

次のコードの出力に混乱しています:

uint8_t x = 0, y = 0x4a;
std::stringstream ss;
std::string a = "4a";


ss << std::hex << a;
ss >> x;

std::cout << (int)x << " "<< (int)y << std::endl;
std::cout << x << " "<< y <<std::endl;
std::cout << std::hex << (int)x <<  " " << (int)y << std::endl;

uint8_t z(x);
std::cout << z;

上記の出力は次のとおりです。

52 74

4J

34 4a

4

変更するときは、最初の行を次のように置き換えます。

uint16_t x = 0, y = 0x4a;

出力は次のようになります。

74 74

74 74

4a 4a

J

何が起こるかは理解していると思いますが、なぜそれが起こるのか、またはそれを防ぐ/回避する方法がわかりません。私の理解では、std::hex修飾子は のタイプのために何らかの形で損なわxれています。技術的なレベルでは正確ではないかもしれませんが、読み取った最初の文字を単に書き込むだけです。

背景: 入力は 16 進数の文字列であると想定されており、各ペアはバイトを表します (文字列以外のビットマップと同様)。各バイトを読み取って保存できるようにしたいuint8_tので、この問題に遭遇したときにそれを試していました。何が最善の方法なのかまだ判断できないので、もし私が行っていることが非効率的または不必要だと思われる場合は、その理由を教えていただければ幸いです。読んでくれてありがとう、

4

1 に答える 1