我的应用程序需要在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。请提出解决方案。谢谢你的帮助。
答案 0 :(得分:4)
从数组的整个范围构造字符串:
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};