如何在C++中将Unicode的字符串转换为Hexa的字符串

how to convert string of unicode to string of hexa in c++

提问人:LPo 提问时间:11/13/2023 更新时间:11/13/2023 访问量:76

问:

我有这个代码示例,它旨在在流中写入一些数据,以便我以后可以再次读取它。

std::ostringstream oss;
int a = 10;
oss.write((char*)&a, sizeof(int));
a = 5;
oss.write((char*)&a, sizeof(int));
// etc...

std::cout << oss.str();

我正在尝试对这个示例进行单元测试,这就是我想操作一些可理解的数据的原因。

问题是oss.str()似乎返回了一串unicode数据,例如: “\u0000\u0000\u0000@\u000a #<\u0000\u0000 ?”

我想在十六进制格式的字符串下检索这个 int 字符串,例如“\0x0a\0x80\0x3f\0x3c”,但我无法弄清楚如何做到这一点。我对 std 库很不熟悉。.

提前感谢您的任何提示!

C++ 字符串 Unicode 类型转换 十六进制

评论

2赞 PaulMcKenzie 11/13/2023
问题是oss.str()似乎返回了一串unicode数据——字符串中的数据不是“unicode”。它只是字节,它是调试器、输出例程等显示数据的方式。看这个
2赞 molbdnilo 11/13/2023
这些是您写入流的字节,解释为字符串; 为零。'\u0000'
1赞 molbdnilo 11/13/2023
我认为你误解了表述。 是四个字符的字符串,而不是十六进制数字的字符串。在 ASCII 中,第一个是换行符,第二个是不可打印的,最后两个是 和 。"\0x0a\0x80\0x3f\0x3c"'?''<'
1赞 Botje 11/13/2023
注意:为 4 个字节。每个字符写入 4 个字节,其中 3 个是 0 字节。如果要一次写一个字符,请改为调用(或)intoss.put(10)oss.put(0x0a)

答:

1赞 stratov 11/13/2023 #1

问题似乎您正在尝试将二进制数据转换为十六进制字符串。

您可以尝试按照以下步骤来实现这一点。

std::string binaryData = oss.str();
std::ostringstream hexStream;
hexStream << std::hex << std::setfill('0');

for (unsigned char byte : binaryData) {
    hexStream << "\\x" << std::setw(2) << static_cast<int>(byte);
}

std::cout << hexStream.str() << std::endl;