c++は整数とバイト配列間の変換を実現する

1713 ワード

整数をバイト配列に変換
ネットワーク伝送では、整数値をバイト配列に変換し、c++、intで4バイト、longで8バイトのバイト配列をクライアントに送信することがしばしば必要である.くだらないことは言わないで、コードは以下の通りです(byteタイプはuchar):
int32_t bytesto_int4(byte *bytes)
{
    //turn bytes array to integer
    int32_t num = bytes[0] & 0xFF;
    num |= ((bytes[1] << 8) & 0xFF00);
    num |= ((bytes[2] << 16) & 0xFF0000);
    num |= ((bytes[3] << 24) & 0xFF000000);
    return num;
}

バイト配列から整数
void int4to_bytes(int32_t num, byte *bytes /*in array size must be 4*/)
{
    //turn integer to bytes array
    bytes[0] = num;
    bytes[1] = num >> 8;
    bytes[2] = num >> 16;
    bytes[3] = num >> 24;
}

拡張(長整数からバイト配列)
void int8to_bytes(int64_t num, byte *bytes /*in array size must be 8*/)
{
    bytes[0] = num;
    bytes[1] = num >> 8;
    bytes[2] = num >> 16;
    bytes[3] = num >> 24;
    bytes[4] = num >> 32;
    bytes[5] = num >> 40;
    bytes[6] = num >> 48;
    bytes[7] = num >> 56;
}

バイト配列からロング整数
int64_t bytesto_int8(byte *bytes /*size must be 8*/)
{
    //turn bytes array to integer
    int64_t num = bytes[0] & 0xFF;
    num |= (((int64_t)bytes[1] << 8) & 0xFF00);
    num |= (((int64_t)bytes[2] << 16) & 0xFF0000);
    num |= (((int64_t)bytes[3] << 24) & 0xFF000000);
    num |= (((int64_t)bytes[4] << 32) & 0xFF00000000);
    num |= (((int64_t)bytes[5] << 40) & 0xFF0000000000);
    num |= (((int64_t)bytes[6] << 48) & 0xFF000000000000);
    num |= (((int64_t)bytes[7] << 56) & 0xFF00000000000000);
    return num;
}