1

ポインター *p からバイナリ コード化された 16 進数値を読み取っています。

16 進値は、 2001:0db8:3c4d:0015:0000:0000:abcd:ef12 です。

対応するバイナリ値は次のとおりです

char *mMmapBase;   
mMmapBase = (char *) mmap( 0, mCollectionFileSize, PROT_READ | PROT_WRITE,
            MAP_SHARED, fileno( aFilePtr ), 0 );

char *p = &mMmapBase[107]; //read from the offset 107
int aTwoBytes;
memcpy(&aTwoBytes, p, 2); //copy first two bytes 

cout << "aTwoBytes : " << aTwoBytes << endl;

出力は 16 進数形式またはバイナリ形式で取得する必要がありますが、次の出力が得られます - aTwoBytes : 539492652。

また、16 進形式で出力したいのですが、どうすればそれを達成できますか?

4

2 に答える 2

2

10進数として印刷するためです。また、値の表現 (10 進数、16 進数など) と、値がコンピューターに格納される方法 (常に 2 進数) が混在している可能性もあります。

16 進数を出力したい場合は、iostream マニピュレータを使用する必要があります。std::hex

std::cout << "aTwoBytes : " << std::hex << aTwoBytes << '\n';

16 ビット値を 32 ビット変数にコピーしているため、「奇妙な」値が得られることもあります。の代わりにint使用したい場合がありますuint16_t(ほとんどのプラットフォームでは と同じですunsigned short)。このために、以下を含める必要がある場合があります<cstdint>

std::uint16_t aTwoBytes;
于 2013-11-08T06:14:36.103 に答える
0

10進数で出力しているためです。

数と基数について学ぶ必要がある - http://en.wikipedia.org/wiki/Radixを参照

于 2013-11-08T06:15:26.910 に答える