c语言16进制负数表示,负数的十六进制与十进制变换

本文介绍了如何在C/C++中进行十六进制和十进制之间的转换,包括从数据帧中提取的2字节十六进制数转换为十进制,以及将十进制负数转换回2字节的十六进制表示。通过示例代码展示了转换过程,并涉及了字节序的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

从数据帧中取到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 

#include 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值