gpt4 book ai didi

c++ - 用十六进制值编码 std::string

转载 作者:行者123 更新时间:2023-11-30 01:54:10 26 4
gpt4 key购买 nike

我的应用程序需要在 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,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22317978/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com