无法读取二进制编码的十六进制值
Unable to read a binary coded hexadecimal value
我正在从指针 *p 读取二进制编码的十六进制值。
十六进制值为:2001:0db8:3c4d:0015:0000:0000:abcd:ef12。
对应的二进制值为:00100000000000010000110110111000001111000100110100000000000101010000000000000000000000000000000010101011110011011110111100010010
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操纵器:
std::cout << "aTwoBytes : " << std::hex << aTwoBytes << 'n';
您可能还会得到一个"奇怪"的值,因为您要将 16 位值复制到 32 位变量中。您可能希望使用uint16_t
而不是int
(在大多数平台上与unsigned short
相同)。为此,您可能需要包括<cstdint>
:
std::uint16_t aTwoBytes;
因为它以十进制打印。
需要了解数字和基数 - 见 http://en.wikipedia.org/wiki/Radix
相关文章:
- 如何在openssl-ecc中获取十六进制格式的私钥
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 将字符指针十六进制转换为字符串并保存在文本文件C++中
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- 为什么mpfr_printf与十六进制浮点(%a转换说明符)的printf不同
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 指向存储在字符串 c++ 中的十六进制
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- C ++如何使用UTF8十六进制代码打印UTF8符号?
- 绝对编码器十六进制输入
- 使用C++将越南语字符从ISO88591、UTF8、UTF16BE、UTF16LE和UTF16编码为十六进制,反之亦然
- 使用十六进制值对标准::字符串进行编码
- 十六进制的编码类型
- 无法读取二进制编码的十六进制值
- 解压缩十六进制编码的浮点数
- 增强数据的序列化十六进制十进制编码
- 如何将十六进制字符串编码为bcbxe中的整数
- 使用stringstream解码十六进制编码的字符串