[英]Decimal to hexadecimal conversion: issues with sprintf?
我有一個要求,其中一部分需要從十進制轉換為十六進制。
我更喜歡通過以下方式執行此操作:
sprintf(mcc,"%x",n);
n
在這里將是一個整數。 但是我的同事說這不是一個好方法。 相反,他說要使用一個函數手動轉換小數,但是我沒有很好地解釋為什么不使用sprintf。
我使用的上述方法是否有問題?
我應該選擇手動將十進制數字轉換為十六進制的函數嗎?
只要確保由mcc
指向的緩沖區足以容納所生成的字符串,我就不會發現問題。
sprintf
的問題在於,很難保證緩沖區足夠大。 請改用snprintf
。
在這種情況下,最大可能的輸出長度很小並且很容易計算,但這並不總是那么容易,我的猜測是這就是為什么您的朋友告訴您不要使用sprintf
。
如果您使用的機器支持GNU擴展,那么也可以使用asprintf
。 這將分配堆內存,將字符串存儲在其中,然后為您提供一個指向它的指針。 只要確保在使用完字符串后就將其free
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.