将char []数组转换为byte [],反之亦然? C ++

时间:2009-05-18 04:02:00

标签: c++ char

将字符数组转换为字节的最佳方法是什么,反之亦然?

解决方案:

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 个答案:

答案 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 byte 一个八位位组。这不是C ++标准所保证的,但实际上总是如此。 char始终至少 8位大,并且预处理器常量CHAR_BIT给出确切的位数。此外,sizeof()运算符根据char的数量告诉您对象/类型的大小,而不是字节八位字节的数量,所以如果你在一些奇怪的系统有一个16位char和一个32位int,那么sizeof(int)将是2,而不是4。

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