将字符数组转换为字节的最佳方法是什么,反之亦然?
解决方案:
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];
}
答案 0 :(得分:13)
char类型是少数几种具有ANSI标准保证大小且大小为1字节的类型之一。据我所知,C不直接定义类型字节。但是,如果一个名为byte的类型实际上不是一个字节大小,那就简直就是疯了。因此,一个简单的演员应该可以做到这一点。
答案 1 :(得分:7)
C ++中没有字节类型,根据标准:
编辑:
1.7:
一个字节至少足够大 包含任何基本成员 执行字符集和是 由连续的序列组成 位,其数量是 实现定义的。
5.3.3:
sizeof(char),sizeof(signed char)和 sizeof(unsigned char)是1;该 sizeof应用于任何其他的结果 基本类型(3.9.1)是 实现定义的。
答案 2 :(得分:4)
C ++中没有字节类型。你可以将'unsigned char'打字为'byte',如果它更好的话。真的,所有字节都在C ++中 - 一个unsigned char。除此之外,是的,我会投...但这个演员阵容更好:
unsigned_char_arr[i]= static_cast<unsigned char>(char_arr[i]);
或者...只需使用char数组并在需要将其解释为unsigned char时将其强制转换...
答案 3 :(得分:1)
在您遇到的几乎所有C ++实现中,char
都是 a 一个八位位组。这不是C ++标准所保证的,但实际上总是如此。 byte
char
始终至少 8位大,并且预处理器常量CHAR_BIT
给出确切的位数。此外,sizeof()
运算符根据char
的数量告诉您对象/类型的大小,而不是字节八位字节的数量,所以如果你在一些奇怪的系统有一个16位char
和一个32位int
,那么sizeof(int)
将是2,而不是4。
编辑:以八位字节替换字节。保证char
是C标准的字节,但不保证一个字节是八位字节,恰好是8位。如果您曾阅读过任何法国技术文献,他们总是使用“八位字节”而不是“字节”,并且它们具有千字节(KO),兆字节(MO)等,而不是千字节和兆字节。