向阳花木(五)C++数据解析 byte 与基本类型

1. 数据结构长度

类型字节数位数取值范围
byte18-2的7次方到2的7次方-1
boolean1(前7位是0)10/1
char216
short216-2的15次方到2的15次方-1
int432-2的31次方到2的31次方-1
float4323.402823e+38 ~ 1.401298e-45
double8641.797693e+308~ 4.9000000e-324
long864-2的63次方到2的63次方-1

2. 示例代码工具

2.1 short

short ToShort(char* pBuffer)
{
    short value = pBuffer[1]&0xFF;
    value <<= 8;
    value |= pBuffer[0]&0xFF;
    return value;
}

unsigned short ToUShort(char* pBuffer)
{
    unsigned short value = pBuffer[1]&0xFF;
    value <<= 8;
    value |= pBuffer[0]&0xFF;
    return value;
}

2.2 int

int ToInt(char* pBuffer)
{
    int value = pBuffer[3]&0xFF;
    value <<= 8;
    value |= pBuffer[2]&0xFF;
    value <<= 8;
    value |= pBuffer[1]&0xFF;
    value <<= 8;
    value |= pBuffer[0]&0xFF;
    return value;
}

unsigned int ToUInt(char* pBuffer)
{
    unsigned int value = pBuffer[3]&0xFF;
    value <<= 8;
    value |= pBuffer[2]&0xFF;
    value <<= 8;
    value |= pBuffer[1]&0xFF;
    value <<= 8;
    value |= pBuffer[0]&0xFF;
    return value;
}

2.3 long

long ToLong(char* pBuffer)
{
    long value = pBuffer[3]&0xFF;
    value <<= 8;
    value |= pBuffer[2]&0xFF;
    value <<= 8;
    value |= pBuffer[1]&0xFF;
    value <<= 8;
    value |= pBuffer[0]&0xFF;
    return value;
}

unsigned long ToULong(char* pBuffer)
{
    unsigned long value = pBuffer[3]&0xFF;
    value <<= 8;
    value |= pBuffer[2]&0xFF;
    value <<= 8;
    value |= pBuffer[1]&0xFF;
    value <<= 8;
    value |= pBuffer[0]&0xFF;
    return value;
}

2.4 int64

int64_t ToInt64(char* pBuffer)
{
    int64_t value = pBuffer[7]&0xFF;
    value <<= 8;
    value |= pBuffer[6]&0xFF;
    value <<= 8;
    value |= pBuffer[5]&0xFF;
    value <<= 8;
    value |= pBuffer[4]&0xFF;
    value <<= 8;
    value |= pBuffer[3]&0xFF;
    value <<= 8;
    value |= pBuffer[2]&0xFF;
    value <<= 8;
    value |= pBuffer[1]&0xFF;
    value <<= 8;
    value |= pBuffer[0]&0xFF;
    return value;
}

uint64_t ToUInt64(char* pBuffer)
{
    uint64_t value = pBuffer[7];
    value <<= 8;
    value |= pBuffer[6]&0xFF;
    value <<= 8;
    value |= pBuffer[5]&0xFF;
    value <<= 8;
    value |= pBuffer[4]&0xFF;
    value <<= 8;
    value |= pBuffer[3]&0xFF;
    value <<= 8;
    value |= pBuffer[2]&0xFF;
    value <<= 8;
    value |= pBuffer[1]&0xFF;
    value <<= 8;
    value |= pBuffer[0]&0xFF;
    return value;
}

2.5 float

float ToFloat(char* pBuffer)
{
    union Float
    {
        char ch[4];
        float f;
    };
    Float value;
    value.ch[0] = pBuffer[0];
    value.ch[1] = pBuffer[1];
    value.ch[2] = pBuffer[2];
    value.ch[3] = pBuffer[3];
    
    return value.f;
}

2.6 double

double ToDouble(char* pBuffer)
{
    union Double
    {
        char ch[8];
        double f;
    };
    Double value;
    value.ch[0] = pBuffer[0];
    value.ch[1] = pBuffer[1];
    value.ch[2] = pBuffer[2];
    value.ch[3] = pBuffer[3];
    value.ch[4] = pBuffer[4];
    value.ch[5] = pBuffer[5];
    value.ch[6] = pBuffer[6];
    value.ch[7] = pBuffer[7];
    return value.f;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小老鼠不吃猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值