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 字节的类型之一。据我所知,C 并没有直接定义类型字节。然而,拥有一个名为 byte 的类型实际上并不是一个字节大小的类型,这简直是太疯狂了。因此,一个简单的演员应该可以解决问题。

于 2009-05-18T04:40:53.430 回答
8

C++ 中没有字节类型,根据标准:

编辑:

1.7:

一个字节至少大到足以包含基本执行字符集的任何成员,并且由连续的位序列组成,其数量由实现定义。

5.3.3:

sizeof(char)、sizeof(signed char) 和 sizeof(unsigned char) 为 1;sizeof 应用于任何其他基本类型(3.9.1)的结果是实现定义的。

于 2009-05-18T04:05:23.123 回答
4

C++ 中没有字节类型。你可以 typedef 'unsigned char' 到 'byte' 如果这样更好的话。真的,这就是 C++ 中的所有字节 - 一个无符号字符。除此之外,是的,我会投......但这个演员更好:

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

或者...只需使用 char 数组并在需要将其解释为无符号字符时将其转换...

于 2009-05-18T04:40:20.373 回答
1

在您会遇到的几乎所有 C++ 实现中,achar恰好byte一个八位字节。C++ 标准不保证这一点,但实际上总是如此。Achar总是至少8 位大,确切的位数由预处理器常数 给出CHAR_BIT。此外,sizeof()运算符会根据 s 的数量告诉您对象/类型的大小char,而不是字节八位组的数量,因此,如果您使用的是 16 位char和 32 位的奇怪系统int,那么sizeof(int)将是2,不是 4。

编辑:用八位字节替换字节。C 标准保证Achar是一个字节,但不保证一个字节是八位字节,正好是 8 位。如果您曾经阅读过任何法国技术文献,它们总是使用“octet”而不是“byte”,并且它们有千字节 (KO)、兆字节 (MO) 等,而不是千字节和兆字节。

于 2009-05-18T04:10:22.073 回答