如何使用OSTRINGSTREAM将C 中的十六进制字符串记录
How to log a hex string in c++ with ostringstream?
我正在尝试将十六进制值记录到ostringstream,但它不起作用。我正在尝试:
unsigned char buf[4];
buf[0] = 0;
buf[1] = 1;
buf[2] = 0xab;
buf[3] = 0xcd;
std::ostringstream e1;
e1 << "0x" << std::setfill('0') << std::setw(3) << std::hex << buf[0] << " " << "0x" << std::setfill('0') << std::setw(3) << std::hex << buf[1] << " " << "0x" << std::setfill('0') << std::setw(3) << std::hex << buf[2] << " " << "0x" << std::setfill('0') << std::setw(3) << std::hex << buf[3];
std::cout << e1.str() << std::endl;
我希望能得到类似" 0x00 0x01 0xab 0xcd"之类的东西,但是我得到了" 0x00"。
我也尝试像
一样打破它 e1 << "0x" << std::setfill('0') << std::setw(3) << std::hex << buf[0];
e1 << " ";
e1 << "0x" << std::setfill('0') << std::setw(3) << std::hex << buf[1];
e1 << " ";
e1 << "0x" << std::setfill('0') << std::setw(3) << std::hex << buf[2];
e1 << " ";
e1 << "0x" << std::setfill('0') << std::setw(3) << std::hex << buf[3];
但是得到同样的东西。
我假设,这里的主题是您的弦乐对char
的解释。尝试将其投入到int
,一切都像魅力一样工作:
#include <iostream>
#include <sstream>
#include <iomanip>
using namespace std;
int main()
{
unsigned char buf[4];
buf[0] = 0;
buf[1] = 1;
buf[2] = 0xab;
buf[3] = 0xcd;
ostringstream e1;
for (uint i=0; i< sizeof(buf); ++i)
{
e1 << "0x" << std::setw(2) << std::setfill('0') << std::hex << static_cast<int>(buf[i]) << " ";
}
cout << e1.str() << endl;
return 0;
}
这为您提供了所需的输出:
0x00 0x01 0xab 0xcd
问题是字符不被视为输出流中的整数,因此整数操纵器不会影响其输出。
基本上...替换
unsigned char buf[4];
unsigned int buf[4];
这有效:
e1 << "0x" << std::setfill('0') << std::setw(2) << std::hex << (int)buf[0]
<< " " << "0x" << std::setfill('0') << std::setw(2) << std::hex << (int)buf[1]
<< " " << "0x" << std::setfill('0') << std::setw(2) << std::hex << (int)buf[2]
<< " " << "0x" << std::setfill('0') << std::setw(2) << std::hex << (int)buf[3];
我添加了(int)
的铸件并更改setW(2)。
相关文章:
- 如何将包含epoch时间的十六进制字符串转换为time_t
- 如何将一个ostringstream十六进制字符串字符对转换为单个unit8t等价的二进制值
- 如何在C++中将十六进制字符串转换为文本数据
- 定义宏以将前缀 0x 添加到十六进制字符串文本
- 将字符串(可以是十进制字符串或十六进制字符串)转换为整数C++
- 将 std::string( "x3BxDEx7C" ) 转换为可读的十六进制字符串?
- C++ 将十六进制字符串表示形式转换为十六进制字符串表示形式
- 字符数组到十六进制字符串的转换 - 意外输出
- C++十进制到十六进制(字符串下标超出范围)
- C++十六进制字符串转换为十六进制的字符 *
- 如何在C++中将十六进制字符串转换为字节字符串?
- 从十六进制字符串转换为十六进制字符数组
- 以C++格式将十六进制字符串转换为十进制数
- 将无符号字符 * 转换为十六进制字符串
- 在C++中将 HWND 转换为十六进制字符串
- 按位函数 AND、OR 和 XOR 在 C++ 中使用十六进制字符串
- 如何将十六进制字符串转换为 HTML 实体
- 查找十六进制字符串是 utf-8 或 utf-16
- 在 c++ 中使用字符串流将 4 个字符的十六进制字符串转换为有符号的短字符串
- 将 std::十六进制字符串转换为 std::array<T, 6>