标签:10 进制 16 int bytes num str byte recv
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,为负数。
标签:10,进制,16,int,bytes,num,str,byte,recv 来源: https://blog.csdn.net/angusfy/article/details/119146180
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。