【发布时间】:2011-11-23 05:50:18
【问题描述】:
我有个需求,部分需要十进制转十六进制。
我更喜欢以下方式来做这件事:
sprintf(mcc,"%x",n);
n 这里将是一个整数。
但我的同行说这不是一个好方法。
相反,他说要使用函数手动转换小数,
但我没有很好地解释为什么不使用 sprintf。
我使用的上述方法有问题吗?
我应该使用手动将十进制数转换为十六进制的函数吗?
【问题讨论】:
我有个需求,部分需要十进制转十六进制。
我更喜欢以下方式来做这件事:
sprintf(mcc,"%x",n);
n 这里将是一个整数。
但我的同行说这不是一个好方法。
相反,他说要使用函数手动转换小数,
但我没有很好地解释为什么不使用 sprintf。
我使用的上述方法有问题吗?
我应该使用手动将十进制数转换为十六进制的函数吗?
【问题讨论】:
只要确保mcc 指向的缓冲区对于生成的字符串足够大,我认为没有问题。
【讨论】:
如果您使用的是支持 GNU 扩展的机器,那么您也可以使用 asprintf。这将分配堆内存,将字符串存储在其中,然后给你一个指向它的指针。完成后请确保您free 字符串。
【讨论】:
sprintf 的问题在于很难保证你的缓冲区足够大。请改用snprintf。
在这种情况下,最大可能的输出长度很小并且很容易计算,但并不总是那么容易,我猜这就是你的朋友告诉你不要使用sprintf的原因。
【讨论】:
n的范围。例如:对于 0
sprintf的原因。
char[5],一个额外的来保存空终止符(\0 在末尾)。