将unsigned char *转换为string

时间:2015-07-22 14:41:12

标签: c++ type-conversion

首先,我有一个这样的数组:

unsigned char testArray[4]={0x00,0x10,0x20,0x00};

应该是以下方法的输入:

void ReadArray(unsigned char * input)
{
   std::string str( input, input + sizeof input / sizeof input[0]);
   std::cout << str << std::endl;
}

我正在寻找一种方法来获得类似于:00102000的字符串。

使用

for (int i =0; i < str.size(); i++)
{
    cout << str[i];
}

我甚至无法显示这些值。

enter image description here

我通常是C#家伙,我在这里有点失落。提示会很好。

更新

这是一个有效的版本:

void Read(unsigned char * input)
{
   std::string str( input, input + sizeof input / sizeof input[0] );

   std::stringstream ss;

   for (int i =0; i < str.size(); i++)
   {
       ss  << std::hex << (int)str[i];
       std::string mystr = ss.str();

       if (mystr.size() == 1)
       mystr = "0" + mystr;

       cout <<mystr;
       ss.str("");
   }
}

结果

enter image description here

1 个答案:

答案 0 :(得分:3)

sizeof input / sizeof input[0]不会给你数组的大小。一旦将数组作为指向函数的指针传递,就会失去从指针获取数组大小的所有能力。

要解决此问题,您需要将数组的大小传递给函数,或者您可以传递开始和结束指针。你也可以使用一个模板来获得你的大小:

template<typename T, size_t SIZE>
void ReadArray(T (&input)[SIZE]) {
    std::string str( input, input + SIZE);
    std::cout << str << std::endl;
}

Live Example