0

所以我正在开发一个取消引用某些地址值的工具,它在 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 数据库,将数组插入表中会很痛苦......

4

3 回答 3

1

我不太明白您想在这里做什么(为什么要将取消引用的值分配给名为 ..._address 的变量)?

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

于 2012-10-05T00:14:36.467 回答
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();
}
于 2012-10-05T00:21:05.823 回答
1

Here's a relatively efficient version that performs only one allocation and no additional function calls:

#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;
}

This should be rather more efficient than using iostreams. You can also modify this trivially to write into a given output buffer, if you prefer a C version which leaves allocation to the consumer.

于 2012-10-05T01:08:40.530 回答