16进制与10进制相互转化-C语言

char型数组转化为int数字,char型数组为16进制表示,其本质是byte与int类型的互相转化

byte不是一种新类型,在C++中byte被定义的是unsigned char类型;但在C#里面byte被定义的是unsigned int类型

以下双字节转换,均为高字节在前:
HEX数据 :0X01 0X68

//转化为HEX,就是十六进制数据拼接0X0168
int sDefibrEnergy  = ((lptrOrder[0] & 0xF0)>>4)*1000 + (lptrOrder[0] & 0x0F)*100 + ((lptrOrder[1] & 0xF0)>>4)*10 + (lptrOrder[1] & 0x0F);
sDefibrEnergy=168
//转化为DEC十进制,其结果是十进制360
 int bytes2Int(byte[] bytes){
        int num=bytes[1] & 0xFF;
        num |=((bytes[0] <<8)& 0xFF00);
        return num;
    }
//num=360;


以下四字节转换,均为高字节在前:

//int转byte

void  intToByte(int i,byte *bytes,int size = 4)

{
     //byte[] bytes = new byte[4];
    memset(bytes,0,sizeof(byte) *  size);
    bytes[0] = (byte) (0xff & i);
    bytes[1] = (byte) ((0xff00 & i) >> 8);
    bytes[2] = (byte) ((0xff0000 & i) >> 16);
    bytes[3] = (byte) ((0xff000000 & i) >> 24);
    return ;
 }

//byte转int
 int bytesToInt(byte* bytes,int size = 4) 
{
    int addr = bytes[0] & 0xFF;
    addr |= ((bytes[1] << 8) & 0xFF00);
    addr |= ((bytes[2] << 16) & 0xFF0000);
    addr |= ((bytes[3] << 24) & 0xFF000000);
    return addr;
 }

当程序中byte被定义有符号的char型时,得出的int也为有符号的数。

以下为个人测试结果

main{
    int8_t recv_str[4];
    int32_t recv_num=0;

    recv_str[0] = 0xFF;
    recv_str[1] = 0xF4;
    recv_str[2] = 0xDC;
    recv_str[3] = 0x70;

    recv_num=bytes2Int(recv_str);	
    PRINTF(" %d ",recv_num);
}

 int bytes2Int(char bytes[])
	 {
        int num=bytes[3] & 0xFF;
        num |=((bytes[2] <<8)& 0xFF00);
        num |=((bytes[1] <<16)& 0xFF0000);
        num |=((bytes[0] <<24)& 0xFF000000);
        return num;
    }

打印结果recv_num=-730000,为负数。

上一篇:1小时打造HaaS版小小蛮驴智能车


下一篇:python踩坑记