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

ご覧のとおり、私がやろうとしているのは、unsignedcharポインターを逆参照することです。私がやりたいのは、文字列変数を持って、逆参照されたすべての値をその変数に連結し、最後までに、各要素を取得するためのケースを通過する必要はありません(文字の配列を持つか、単にポインタを介して)すべてが内部にある文字列変数を持つようにします。

注:文字列変数は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

これは、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バージョンが必要な場合は、これを簡単に変更して、特定の出力バッファーに書き込むこともできます。

于 2012-10-05T01:08:40.530 に答える