一个字节为8位二进制位

1 int字节数组byte[]

C++中,字节数组byte通常用unsigned char表示,所以int转换为字节数组本质上是将int转换为unsigned char数组。int一般为4个字节,那么就为32位二进制位表示。

代码如下:

void IntToByte(int value, unsigned char* bytes)
{
    size_t length = sizeof(int);
    memset(bytes, 0, sizeof(unsigned char) * length);
    bytes[0] = (unsigned char)(0xff & value);
    bytes[1] = (unsigned char)((0xff00 & value) >> 8);
    bytes[2] = (unsigned char)((0xff0000 & value) >> 16);
    bytes[3] = (unsigned char)((0xff000000 & value) >> 24);
}

2 字节数组byte[]转int

代码如下:

int ByteToInt(unsigned char* byteArray)
{
    int value = byteArray[0] & 0xFF;
    value |= ((byteArray[1] << 8) & 0xFF00);
    value |= ((byteArray[2] << 16) & 0xFF0000);
    value |= ((byteArray[3] << 24) & 0xFF000000);
    return value;
}

3 使用场景

例如在有些情况下的通信协议,举一个简单的栗子,在socket通信下,我们通常会想要知道本次接收的数据的长度有多大,那么这个时候就可以在要发送数据块的前面使用4个字节标志数据块的大小,而这时候就需要将int转换为字节数组。

4 使用示例

#include <iostream>

void IntToByte(int value, unsigned char* bytes)
{
    size_t length = sizeof(int);
    memset(bytes, 0, sizeof(unsigned char) * length);
    bytes[0] = (unsigned char)(0xff & value);
    bytes[1] = (unsigned char)((0xff00 & value) >> 8);
    bytes[2] = (unsigned char)((0xff0000 & value) >> 16);
    bytes[3] = (unsigned char)((0xff000000 & value) >> 24);
}

int ByteToInt(unsigned char* byteArray)
{
    int value = byteArray[0] & 0xFF;
    value |= ((byteArray[1] << 8) & 0xFF00);
    value |= ((byteArray[2] << 16) & 0xFF0000);
    value |= ((byteArray[3] << 24) & 0xFF000000);
    return value;
}


int main()
{
    unsigned char intByteArray[4];
    int a = 10;
    IntToByte(a, intByteArray);

    std::cout << ByteToInt(intByteArray) << std::endl;

    return 0;
}