负数的十六进制与十进制变换
负数的十六进制与十进制转换
从数据帧中取到2字节的数据,例如FFOA,存于char数组中,现在要将其转为10进制,怎么写?
反过来,十进制负数转换成2字节的十六进制,怎么写?
------解决方案--------------------
short v1;
char c[2];
// 十六转十
v1 = *(short*)c;
// 十转十六
*(short*)c = v1;
如果非要高位在前,就加上 swap(c[0], c[1]);
------解决方案--------------------
需要转吗?不需要!看例子:
------解决方案--------------------
从数据帧中取到2字节的数据,例如FFOA,存于char数组中,现在要将其转为10进制,怎么写?
反过来,十进制负数转换成2字节的十六进制,怎么写?
------解决方案--------------------
short v1;
char c[2];
// 十六转十
v1 = *(short*)c;
// 十转十六
*(short*)c = v1;
如果非要高位在前,就加上 swap(c[0], c[1]);
------解决方案--------------------
需要转吗?不需要!看例子:
short a = 0xff0a;
printf("%d\n", a);
a = -100;
printf("%x\n", a);
------解决方案--------------------
//0xFF 0x0A,存于char数组中,现在要将其转为10进制,怎么写?
//反过来,十进制负数转换成2字节的十六进制,怎么写?
#include <stdio.h>
#include <memory.h>
char a[2];
char b[4];
short int *psi,si;
int *pi,i;
int main() {
a[0]='\xFF';
a[1]='\x0A';
b[0]=a[1];
b[1]=a[0];
if (b[1]&0x80) {
b[2]='\xFF';
b[3]='\xFF';
} else {
b[2]=0;
b[3]=0;
}
psi=(short int *)b;
printf("%hd\n",*psi);
memcpy(&si,b,2);
printf("%hd\n",si);
pi=(int *)b;
printf("%d\n",*pi);
memcpy(&i,b,4);
printf("%d\n",i);
a[1]=0;
a[0]=0;
si=-246;
a[1]=((char *)&si)[0];
a[0]=((char *)&si)[1];
printf("0x%02x,0x%02x\n",(unsigned char)a[0],(unsigned char)a[1]);
a[1]=0;
a[0]=0;
i=-246;
a[1]=((char *)&i)[0];
a[0]=((char *)&i)[1];
printf("0x%02x,0x%02x\n",(unsigned char)a[0],(unsigned char)a[1]);
return 0;
}
//-246
//-246
//-246
//-246
//0xff,0x0a
//0xff,0x0a