大规模编辑:
我有一个 long int 变量,我需要将其转换为有符号的 24 位十六进制字符串,而开头没有“0x”。字符串必须是 6 个字符,后跟字符串终止符 '\0',因此需要添加前导零。
示例:[-1 -> FFFFFF] --- [1 -> 000001] --- [71 -> 000047]
答案 这似乎可以解决问题:
long int number = 37;
char string[7];
snprintf (string, 7, "%lX", number);
大规模编辑:
我有一个 long int 变量,我需要将其转换为有符号的 24 位十六进制字符串,而开头没有“0x”。字符串必须是 6 个字符,后跟字符串终止符 '\0',因此需要添加前导零。
示例:[-1 -> FFFFFF] --- [1 -> 000001] --- [71 -> 000047]
答案 这似乎可以解决问题:
long int number = 37;
char string[7];
snprintf (string, 7, "%lX", number);
看sprintf
。说明%lx
符做你想做的事。
因为您只需要六位数字,您可能需要进行一些屏蔽以确保该数字符合您的要求。像这样的东西:
sprintf(buffer, "%06lx", (unsigned long)val & 0xFFFFFFUL);
请注意,您将所有长整数映射到小范围的表示中。您可能需要在打印之前检查数字是否在特定范围内(例如 -2^23 < x < 2^23 - 1)
使用itoa
. 它将所需的基数作为参数。
或者再想一想,没有。使用sprintf
,这是符合标准的。
在标题中你说你想要一个有符号的十六进制字符串,但你所有的例子都是无符号的十六进制字符串。假设这些示例是您想要的,最简单的方法是
sprintf(buffer, "%06X", (int)value & 0xffffff);