14

文字の配列をバイトに、またはその逆に変換する最良の方法は何ですか?

解決:

void CharToByte(char* chars, byte* bytes, unsigned int count){
    for(unsigned int i = 0; i < count; i++)
        bytes[i] = (byte)chars[i];
}

void ByteToChar(byte* bytes, char* chars, unsigned int count){
    for(unsigned int i = 0; i < count; i++)
         chars[i] = (char)bytes[i];
}
4

4 に答える 4

14

char 型は、ANSI 標準によって保証されたサイズを持つ数少ない型の 1 つであり、そのサイズは 1 バイトです。私の知る限り、C はバイト型を直接定義していません。ただし、実際にはサイズがバイトではない byte という名前の型を持つことは、非常識ではありません。したがって、単純なキャストでうまくいくはずです。

于 2009-05-18T04:40:53.430 に答える
8

C++ にはバイト型はなく、標準によると:

編集:

1.7:

1 バイトは、少なくとも基本的な実行文字セットの任意のメンバーを格納するのに十分な大きさであり、ビットの連続したシーケンスで構成され、その数は実装定義です。

5.3.3:

sizeof(char)、sizeof(signed char)、および sizeof(unsigned char) は 1 です。他の基本型 (3.9.1) に適用される sizeof の結果は実装定義です。

于 2009-05-18T04:05:23.123 に答える
4

C++ にはバイト型はありません。'unsigned char' を 'byte' に typedef することもできます。C++ のバイトはこれだけです - unsigned char です。それを除けば、はい、キャストします...しかし、このキャストの方が優れています:

unsigned_char_arr[i]= static_cast<unsigned char>(char_arr[i]);

または... char配列を使用して、unsigned charとして解釈する必要があるときにキャストします...

于 2009-05-18T04:40:20.373 に答える
1

遭遇するほぼすべての C++ 実装で、acharは正確byteオクテットです。これは C++ 標準では保証されていませんが、実際には常にそうです。Acharは常に少なくとも8 ビットの大きさであり、正確なビット数はプリプロセッサ定数によって指定されCHAR_BITます。また、演算子は、バイトオクテットの数ではなく、 のsizeof()数に関してオブジェクト/タイプのサイズを通知するため、16 ビットと 32ビットの奇妙なシステムを使用している場合は、 4 ではなく 2 です。charcharintsizeof(int)

編集:バイトをオクテットに置き換えました。Acharは C 標準によって 1 バイトであることが保証されていますが、1 バイトが正確に 8 ビットであるオクテットであるとは保証されていません。フランスの技術文献を読んだことがあれば、それらは常に「バイト」の代わりに「オクテット」を使用し、キロバイトやメガバイトの代わりにキロオクテット (KO)、メガオクテット (MO) などを使用しています。

于 2009-05-18T04:10:22.073 に答える