我有一个16位数字,这个数字是2s补码示例0xFF25.Let假设a = 0xFF25 我希望从它获取原始数字'a'并保存另一个十六进制值b(b是16位变量) 请告诉我一个找到b。(C代码)
的方法示例:
signed short int Data_proc(unsigned char data_high, unsigned char data_low)
{
signed short int ddata;
ddata = ((data_high<<8)|data_low);
return ddata;
}
I=Data_proc(a,b);//Now I contain a 2s complement value
我想要从中获取真正的十六进制值。
答案 0 :(得分:1)
如果我理解你的话(我真的不知道我是否知道)你想要这样的东西
short a = 0xff25;
printf("hexadecimal %04x equals decimal %hd\n", a, a);
就像我和其他人在评论中所说的那样,数字不是以十六进制,十进制或八进制存储,只是以二进制位,1和0存储。十六进制,十进制和八进制仅用于表示,以使输入或输出看起来更好,更易读。
当你这样做时。
int a = 0xff25;
a
中实际存储的是位1111111100100101
。这些位实际上意味着什么,当您打印它们时,它取决于您。
答案 1 :(得分:0)
在2的补码中,0xFFFF将是-1的表示。如果你有一个包含0xFFFF的变量,你可以像这样分配它:
int16_t a = -1;
uint16_t b = a;
printf("%x %d %d %x", a, a, b, b);
将按如下方式为您打印两种格式。
ffffffff -1 65535 ffff