我有一个要求,其中一部分需要从十进制转换为十六进制。
我更喜欢以下方式来做这件事:
sprintf(mcc,"%x",n);
n
这里是一个整数。
但我的同行说这不是一个好方法。
相反,他说要使用函数手动转换小数,
但是我没有得到关于为什么不使用sprintf的好解释。
我使用的上述方法有问题吗?
我应该使用手动将十进制数转换为十六进制的函数吗?
答案 0 :(得分:3)
只要确保mcc
指向的缓冲区对于生成的字符串足够大,我就没有问题。
答案 1 :(得分:1)
sprintf
的问题在于,很难保证您的缓冲区足够大。请改用snprintf
。
在这种情况下,最大可能的输出长度很小并且很容易计算,但并不总是这么容易,我猜这就是为什么你的朋友告诉你不要使用sprintf
。< / p>
答案 2 :(得分:1)
如果您使用的是支持GNU扩展的计算机,那么您也可以使用asprintf
。这将分配堆内存,将字符串存储在其中,然后为您提供指向它的指针。完成后,请确保free
字符串。