2017-11-28 15 views
1

文字の値を数値として読み取って、それに対応する16進数値を見つける必要があります。文字からASCII値を読み取って16進形式の文字列に変換する方法

#include <iostream> 
#include <iomanip> 
using namespace std; 
int main() { 
    char c = 197; 
    cout << hex << uppercase << setw(2) << setfill('0') << (short)c << endl; 
} 

出力:

FFC5

予想される出力:

C5

+1

'unsigned char'と' unsigend short'を使用します – SHR

答えて

2

問題は、あなたが使用している場合ということですchar c = 197charタイプがオーバーフローしており、負数(-59)が生成されています。そこから始めて、より大きな型にどのような変換をしても問題ありません。負の数のままです。

two's complementの仕組みを知っておく必要がある理由を十分に理解する。

基本的には、-59192は同じバイナリ表現:1100 0101を持ちますが、どちらか一方の方法で解釈されます。 16進形式を使用して印刷すると、バイナリ表現(メモリに格納されている実際の値)が使用され、C5が生成されます。 charshort/unsigned shortに変換される場合

、それは両方の場合のため1111 1111 1100 0101FFC5)であり、そのshort/unsigned short表現に-59変換されます。

それを行うための正しい方法は、データ型は非常に最初から(unsigned charshortunsigned short、...)を表すことが可能である変数に初期値(197)を格納することです。

関連する問題