1

我正在从指针 *p 读取二进制编码的十六进制值。

十六进制值为: 2001:0db8:3c4d:0015:0000:0000:abcd:ef12。

0对应的二进制值为: 0010000000000001000011011011100000111100010011010000000000010101000000000000000000000000000000000101010111100100111101111

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;

我应该以十六进制形式或二进制形式获得输出,但是,我得到以下输出 - aTwoBytes:539492652。谁能告诉我为什么?

另外,我想要十六进制形式的输出,我该如何实现呢?

4

2 回答 2

2

因为您将其打印为十进制。您可能还会将值的表示(如十进制、十六进制等)与值在计算机中的存储方式(始终为二进制)混合在一起。

如果要打印十六进制数,则必须使用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

因为它是以十进制打印的。

需要了解数字和基数 - 请参阅http://en.wikipedia.org/wiki/Radix

于 2013-11-08T06:15:26.910 回答