0

我最近刚被要求使用 C——我通常使用 Python 和一点 Java——我遇到了一些问题。

我创建了一个函数,它将 base-10 unsigned int 转换为表示等效十六进制的字符数组。现在我需要能够将类型为 uint32_t 的变量设置为此“十六进制”;我能做些什么来确保这个 char[] 被视为实际的十六进制值?

代码如下:

int DecToHex(long int conversion, char * regParams[])
{    
    int hold[8];

    for (int index = 0; conversion > 0; index++)
    {
        hold[index] = conversion % 16;
        conversion = conversion / 16;
    }

    int j = 0;

    for (int i = 7; i > -1; i--)
    {
        if (hold[i] < 10 && hold[i] >= 0)
        {
            regParams[j] = '0' + hold[i];
        }
        else if (hold[i] > 9 && hold[i] < 16)
        {
            regParams[j] = '7' + hold[i];
        }
        else
        {
            j--;
        }
        j++;
    }
    return 0;
}
4

1 回答 1

4

你应该只使用snprintf

int x = 0xDA8F;
char buf[9];
snprintf(buf, sizeof(buf), "%X", x);   // Use %x for lowercase hex digits

要将数字的十六进制表示形式转换为int,请使用strtol(它的第三个参数允许您指定基数),或者,因为您要将其分配给unsigned数据类型,所以使用strtoul.

代码看起来像这样:

char* HexStr = "8ADF4B";
uint32_t Num = strtoul(HexStr, NULL, 16);
printf("%X\n", Num);        // Outputs 8ADF4B
于 2015-05-20T17:40:59.880 回答