c++ - 无法读取二进制编码的十六进制值

标签 c++ pointers binary hex type-conversion

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

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

对应的二进制值为: 00100000000000010000110110111000001111000100110100000000000101010000000000000000000000000000000001010101111110101010

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。谁能告诉我为什么?

另外,我想以十六进制形式输出如何实现?

最佳答案

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

如果你想打印一个十六进制数,那么你必须使用 std::hex iostream manipulator :

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

您可能还会得到一个“奇怪”的值,因为您正在将一个 16 位值复制到一个 32 位变量中。而不是 int你可能想使用 uint16_t (在大多数平台上与 unsigned short 相同)。为此,您可能需要包括 <cstdint> :

std::uint16_t aTwoBytes;

关于c++ - 无法读取二进制编码的十六进制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19852699/

相关文章:

C++ 子字符串似乎指向错误的位置

c++ - WinHTTP 是在下载空字节还是我错误地复制了结果缓冲区?

c++ - 找到字符串中的所有回文

c++ - C++头文件中的对象初始化问题

C++ 地址和指针

svn - 如何明确告诉 SVN 将文件视为文本而不是二进制文件

excel - 将 Hex 文件转换为 Excel 文件

c++ - For循环与使用相对较旧的编译器的标准库算法

c++ - 结构/对象内的存储顺序

python - 将零列和一列解释为二进制并存储为整数列