web-dev-qa-db-ja.com

char []の配列をbyte []に​​、またはその逆に変換しますか? C ++

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

解決:

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];
}
13
Jean

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

13
JaredPar

C++にはバイト型はなく、標準によれば、

編集:

1.7:

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

5.3.3:

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

7
Özgür

C++にはバイト型はありません。 'unsigned char'を 'byte'にtypedefすることができます。実際には、バイトはすべてC++にあります-符号なし文字。それとは別に、はい、キャストしますが、このキャストの方が優れています。

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

または... char配列を使用し、unsigned charとして解釈する必要がある場合はキャストしてください...

4
Demi

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

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

1
Adam Rosenfield