【发布时间】:2020-06-04 00:13:59
【问题描述】:
我编写了一个函数,它接收一个数组和指针,并将 int 的字符串表示形式以十六进制字符形式写入数组。
void int_to_hexa_repr(char *arr, void *arg)
{
int number = *(int*)arg;
char const digit[] = "0123456789abcdef"; //hex digits
char* pt = arr;
if (number < 0)
{
*pt++ = '-';
number *= -1;
}
int shifter = number;
do
{
++pt;
shifter = shifter/16;
} while (shifter);
*pt = '\0';
do
{
*--pt = digit[number%16];
number = number/16;
} while (number);
}
我用测试文件检查了函数,我注意到当我插入一个负整数时,预期的字符串表示与实际结果不同。例如,int = -27 的预期结果是 ffffffe5,而我的函数返回 -1b。
对于正整数值,预期结果和实际结果相等。
如何更改函数以正确处理负整数?
【问题讨论】:
-
您可以通过在前面加上
-和否定(if (number unsigned,你应该使用unsigned而不是int -
查找双打恭维。这就是负数在内部的表示方式。
-
@ChrisDodd:通过打印“-”来处理负数,然后取反,然后继续使用正数的代码将无法获得二进制补码
INT_MIN,因为取反会溢出。
标签: c