十进制到十六进制转换:sprintf的问题?

时间:2011-11-23 05:50:19

标签: c printf

我有一个要求,其中一部分需要从十进制转换为十六进制。

我更喜欢以下方式来做这件事:

sprintf(mcc,"%x",n);

n这里是一个整数。 但我的同行说这不是一个好方法。 相反,他说要使用函数手动转换小数, 但是我没有得到关于为什么不使用sprintf的好解释。

我使用的上述方法有问题吗?

我应该使用手动将十进制数转换为十六进制的函数吗?

3 个答案:

答案 0 :(得分:3)

只要确保mcc指向的缓冲区对于生成的字符串足够大,我就没有问题。

答案 1 :(得分:1)

sprintf的问题在于,很难保证您的缓冲区足够大。请改用snprintf

在这种情况下,最大可能的输出长度很小并且很容易计算,但并不总是这么容易,我猜这就是为什么你的朋友告诉你不要使用sprintf。< / p>

答案 2 :(得分:1)

如果您使用的是支持GNU扩展的计算机,那么您也可以使用asprintf。这将分配堆内存,将字符串存储在其中,然后为您提供指向它的指针。完成后,请确保free字符串。