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,为负数。