C - 将long int转换为带符号的十六进制字符串

时间:2010-04-29 20:53:40

标签: c integer hex typeconverter

大规模编辑:

我有一个long int变量,我需要转换为带符号的24位十六进制字符串,开头没有“0x”。字符串必须是6个字符后跟一个字符串终止符'\ 0',因此需要添加前导零。

实施例: [-1 - > FFFFFF] --- [1 - > 000001] --- [71 - > 000047]

答案 这似乎可以解决问题:

long int number = 37;
char string[7];

snprintf (string, 7, "%lX", number);

4 个答案:

答案 0 :(得分:10)

看看sprintf%lx说明符可以满足您的需求。

答案 1 :(得分:9)

因为您只需要六位数字,所以您可能需要进行一些屏蔽以确保数字符合您的要求。像这样:

sprintf(buffer, "%06lx", (unsigned long)val & 0xFFFFFFUL);

请注意,您将所有长整数映射到一小部分表示中。在打印之前,您可能想要检查数字是否在特定范围内(例如,-2 ^ 23

答案 2 :(得分:1)

使用itoa。它需要所需的基础作为参数。

或者第二个想法,不。使用符合标准的sprintf

答案 3 :(得分:1)

在标题中,您说您想要一个带符号的十六进制字符串,但所有示例都是无符号十六进制字符串。假设示例是您想要的,最简单的方法是

sprintf(buffer, "%06X", (int)value & 0xffffff);