取消引用unsigned char指针并将其值存储到字符串中

时间:2012-10-05 00:09:47

标签: c++ c string pointers casting

所以我正在研究一种取消引用某些地址值的工具,它在C和C ++中,虽然我不熟悉C ++,但我发现我可以利用C ++提供的字符串类型。

我拥有的是:

unsigned char contents_address = 0; 
unsigned char * address = (unsigned char *) add.addr;
int i;

for(i = 0; i < bytesize; i++){     //bytesize can be anything from 1 to whatever
  if(add.num == 3){
    contents_address = *(address + i); 
    //printf("%02x ", contents_address);
  }
}

正如您所看到的,我想要取消引用unsigned char指针。我想要做的是拥有一个字符串变量并将所有解除引用的值连接到它中,而不是通过一个for case来获取每个元素(通过拥有一个字符数组或者只是去通过指针)得到一个包含所有内容的字符串变量。

注意:我需要这样做,因为字符串变量将转到MySQL数据库,将数组插入表格会很麻烦......

3 个答案:

答案 0 :(得分:1)

我不太明白你想在这里做什么(为什么要为一个名为..._ address的变量指定一个解除引用的值?)。

但也许你正在寻找的是一个字符串流。

答案 1 :(得分:1)

试试这个我从这个链接借来的:

http://www.corsix.org/content/algorithmic-stdstring-creation

#include <sstream>
#include <iomanip>

std::string hexifyChar(int c)
{
  std::stringstream ss;
  ss << std::hex << std::setw(2) << std::setfill('0') << c;
  return ss.str();
}

std::string hexify(const char* base, size_t len)
{
  std::stringstream ss;
  for(size_t i = 0; i < len; ++i)
    ss << hexifyChar(base[i]);
  return ss.str();
}

答案 2 :(得分:1)

这是一个相对有效的版本,只执行一次分配而没有其他函数调用:

#include <string>

std::string hexify(unsigned char buf, unsigned int len)
{
    std::string result;
    result.reserve(2 * len);

    static char const alphabet[] = "0123456789ABCDEF";

    for (unsigned int i = 0; i != len)
    {
        result.push_back(alphabet[buf[i] / 16]);
        result.push_back(alphabet[buf[i] % 16]);
    {

    return result;
}

这应该比使用iostream更有效。如果您更喜欢将C分配给消费者的C版本,您也可以通过简单地修改它来写入给定的输出缓冲区。