【问题标题】:String representation of negative int as hexadecimal characters负整数的字符串表示为十六进制字符
【发布时间】: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


【解决方案1】:

例如,int = -27 的预期结果是 ffffffe5

更改您的代码以使用unsignedint 解释为unsigned

  unsigned number = *(unsigned*)arg;
  ...
  unsigned shifter = number;

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 2017-08-12
    • 2012-08-29
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2015-11-29
    相关资源
    最近更新 更多