このような配列がある場合
unsigned char data[2850] = "";
プログラムの一部を実行した後、最終的にはバイト要素でいっぱいになるため、ループしてログアウトすると、次のように表示されます。
for (size_t i= 0; i < sizeof(data); i++) {
printf("%02X ", data[i]);
}
//log window shows 01 24 81 00 0E 1C 44 etc...
データ配列のすべての要素を取得してconstcharに入れる方法はありますか?それとも1つの大きな文字列ですか?うまくいけば、私は十分に明確になっています。私の目標は、最終的にこのデータ配列のすべての要素を、プログラム内の他の場所で使用できるbase64でエンコードされた文字列に変換することです。
Cの文字列(文字列)を、連番の配列であるchar
sentianal文字(ヌルターミネータ:によって終了S '\0'
)
これは、配列のどこかに値0x00のバイトがある場合、シーケンスが終了する前に「文字列」を終了する可能性があることを意味します。あなたの例では、data
配列を文字列に変換した場合、その終わりが最初の要素になります。
data[]{00, EB, 23, EC, FF, etc... };
ここにあるデータの値から文字列を作成する場合は、次のように使用できますsprintf()
。
unsigned char val = 00;
data[0] = val;
char dump[5] = {0};
sprintf(dump, "%02x", data[0]);
これで、値が「00」の文字列ができました。次のようなものを使用して、文字列をより魅力的にすることができます。
sprintf(dump, "0x%02x", data[0]);
そのため、16進データとして表示するための「0x00」があります。
このようなものをループして完全な文字列を与えることができます...しかし、印刷可能な文字列は少なくともデータ文字列のサイズの2x + 1(ASCIIの場合は2x、nullの場合は+1)である必要があることに注意してください。新しい文字列を段階的に入力します。例:
unsigned char data[5] = {0x00, 0x12, 0xB3, 0xFF, 0xF0};
char printstr[11] = {00};
for(int x = 0; x < 5; x++)
sprintf(printstr+(x*2), "%02x", data[x]);
printstr[10] = '\0';
今printstr
持っています"0012b3fff0"
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加