文字の配列をバイトに、またはその逆に変換する最良の方法は何ですか?
解決:
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];
}
Char型は、ANSI標準でサイズが保証されている数少ない型の1つであり、そのサイズは1バイトです。私の知る限り、Cは型バイトを直接定義していません。ただし、実際には1バイトのサイズではないbyteという名前の型を持つことは、非常識なことではありません。したがって、単純なキャストでうまくいくはずです。
C++にはバイト型はなく、標準によれば、
編集:
1.7:
バイトは、少なくとも基本的な実行文字セットのメンバーを格納するのに十分な大きさであり、連続するビットのシーケンスで構成され、その数は実装定義です。
5.3.3:
sizeof(char)、sizeof(signed char)およびsizeof(unsigned char)は1です。他の基本型(3.9.1)に適用されたsizeofの結果は実装定義です。
C++にはバイト型はありません。 'unsigned char'を 'byte'にtypedefすることができます。実際には、バイトはすべてC++にあります-符号なし文字。それとは別に、はい、キャストしますが、このキャストの方が優れています。
unsigned_char_arr[i]= static_cast<unsigned char>(char_arr[i]);
または... char配列を使用し、unsigned charとして解釈する必要がある場合はキャストしてください...
あなたが遭遇するほとんどすべてのC++実装では、char
は正確に 変数__ オクテット。これはC++標準では保証されていませんが、事実上常にそうです。 byte
は常に少なくとも8ビットの大きさであり、正確なビット数はプリプロセッサ定数_CHAR_BIT
_によって指定されます。また、sizeof()
演算子は、オブジェクト/タイプのサイズを、char
sの数ではなくchar
sの数で示します バイト オクテットなので、16ビットのchar
と32ビットのint
を持つ奇妙なシステムを使用している場合、sizeof(int)
は4ではなく2になります。
編集:バイトをオクテットに置き換えました。 char
は、C標準によってバイトであることが保証されていますが、バイトは、正確に8ビットであるオクテットであることが保証されていません。フランスの技術文献を読んだことがある場合、それらは常に「バイト」ではなく「オクテット」を使用しており、キロバイトやメガバイトの代わりにキロオクテット(KO)、メガオクテット(MO)などがあります。