使用十六进制值对标准::字符串进行编码
Encode std::string with hex values
我的应用程序需要一些十六进制值在 std::string 中编码和传输。所以我是这样做的。
static string printHex(const string& str)
{
stringstream ss;
ss << "[ " << hex;
for (int i = 0; i < str.size(); i++)
{
ss << (((uint32_t)str[i] )& 0xFF) << " ";
}
ss << "]" << dec;
return ss.str();
}
int main()
{
char ptr[] = {0xff, 0x00, 0x4d, 0xff, 0xdd};// <--see here, 0x00 is the issue.
string str(ptr);
cout << printHex(str) << endl;
return 0;
}
显然,字符串最多只能获取0x00的值,其余数据将丢失。如果没有0x00它将适用于任何值。但我也需要0x00。请提出解决方案。感谢您的帮助。
从数组的整个范围构造字符串:
std::string str(std::begin(ptr), std::end(ptr)); // C++11
std::string str(ptr, ptr + sizeof ptr); // Historical C++
请注意,这仅在ptr
实际上是数组而不是指针时才有效。如果您只有一个指针,则无法知道它指向的数组的大小。
您应该考虑将数组称为ptr
以外的其他名称,这意味着它可能是一个指针。
或者,在 C++11 中,您可以列表初始化字符串,而无需数组:
std::string str {0xff, 0x00, 0x4d, 0xff, 0xdd};
相关文章:
- 将C++ std::string 转换为 UTF-16-LE 编码的字符串
- 使用文件内容作为硬编码字符串
- MSVC UTF8字符串编码使用了不正确的代码点
- 字符串编码问题
- 字符串编码用于内存优化
- 更改狭窄的字符串编码或丢失std :: filesystem :: path :: imbue
- 通过c++主字符**参数处理不同字符串编码的正确方法是什么
- C标准:字符集和字符串编码规范
- boost::locale to_utf字符串编码的函数,喜欢抛出
- Windows NT 二进制可执行文件内部常量字符串编码
- 跨平台c++:使用本地字符串编码或跨平台标准化
- 如何将字符串编码为8位ASCII字符
- 如何将十六进制字符串编码为bcbxe中的整数
- 简化字符串编码的c++表达式
- Mongodb c++驱动程序:字符串编码
- VS2010不理解自己文件的字符串编码
- c++字符串编码
- C++字符串编码UTF8 /Unicode
- 字符串编码 VB6 / C++ dll
- 库的字符串编码是否符合Unicode或灵活