データを として受け取りvector<char>
、そこから を作成する必要がありますstring
。ベクトルには utf-16 文字 (ヌル バイト) を含めることができ、固定サイズです。実際のデータは、この固定サイズになるまで null バイトで埋められます。したがって、たとえば、次のベクトルを使用できます。
\0 a \0 b \0 c \0 d \0 \0 \0 \0
固定サイズは 12 で、ベクトルには utf-16 文字列 "abcd" が含まれ、サイズに合わせて 4 つの null 文字が埋め込まれます。
これから、実際にこの文字列を抽出する必要があります。utf-16 から に変換するコードは既にありますが、string
混乱したのは、パディングなしでベクトル内の文字数 (バイト) を見つけることです。上記の例では、数字は 8 です。
私は次のようなことから始めました:
std::string CrmxFile::StringFromBytes(std::vector<char> data, int fixedsize) {
std::vector<char>iterator it = data.rbegin();
while(it != data.rend() && *it == '\0') {
it++;
}
return std::string(&data[0], fixedsize - (it - data.rbegin());
}
ただし、完全なコンテキストでは、ベクトルには多くのデータが含まれているため、指定された部分のみを使用して上記の操作を行う必要があります。たとえば、ベクトルに 1000 個の要素が含まれる可能性があり、位置 30 から始まり、最大 12 文字の文字列を取得する必要があります。もちろん、上記のロジックを適用する前に、別のベクトルを作成して必要な 21 文字をコピーすることもできますが、指定されたベクトルに対して直接何かを実行できるはずだと感じています。それでも、どのイテレータと何を比較しているのか把握できません。どんな助けでも大歓迎です。