负数的十六进制与十进制变换

负数的十六进制与十进制转换
从数据帧中取到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