6

タイプ uint8_t の配列があります。配列の各要素を連結する文字列を作成したいと考えています。これはostringstreamを使用した私の試みですが、後で文字列が空になるようです。

std::string key = "";
std::ostringstream convert;
for (int a = 0; a < key_size_; a++) {                                               
  convert << key_arr[a]
  key.append(convert.str());
}

cout << key << endl;
4

2 に答える 2

6

これを試して:

std::ostringstream convert;
for (int a = 0; a < key_size_; a++) {
    convert << (int)key[a];
}

std::string key_string = convert.str();

std::cout << key_string << std::endl;

ostringstreamクラスは文字列ビルダーのようなものです。それに値を追加できます。完了.str()したら、そのメソッドを呼び出して、std::string入力したすべてを含む を取得できます。

値をに追加する前にuint8_t値をキャストする必要があります。そうしないと、値が文字として扱われるためです。一方、それらが文字を表している場合は、キャストを削除して実際の文字を表示する必要があります。intostringstream(int)


編集: 配列に 0x1F 0x1F 0x1F が含まれていて、文字列を 1F1F1F にしたい場合は、次のようにマニピュレータstd::uppercasestd::hexマニピュレータを使用できます。

std::ostringstream convert;
for (int a = 0; a < key_size_; a++) {
    convert << std::uppercase << std::hex << (int)key[a];
}

10 進数と小文字に戻したい場合は、 and を使用する必要がありstd::nouppercaseますstd::dec

于 2015-03-28T17:48:38.183 に答える