2011-08-25 303 views
1

我想學習彙編程序,並且想編寫一個函數將數字轉換爲字符串。我想寫的函數的簽名會看起來像這樣在C狀方式:將整數轉換爲字符串

int numToStr(long int num, unsigned int bufLen, char* buf) 

函數應該返回中使用的字節數,如果轉換成功,並0否則。

我目前的做法是一個簡單的算法。在所有情況下,如果緩衝區已滿,則返回0.

  1. 檢查數字是否定的。如果是,則將- char寫入buf[0],並將緩衝區中的當前位置增加
  2. 重複除以10,並將剩餘部分存儲在緩衝區中,直到除法得出0
  3. 顛倒緩衝區中的數字。

這是進行此轉換的最佳方式嗎?

+0

這種方法的一個問題是,你會得到相反的順序數字。 – cnicutar

+0

@cnicutar你讀過我的方法的第3點了嗎? – fuz

+0

沒有看到:-) – cnicutar

回答

2

這幾乎是我見過的每一個itoa的實現。

有一件你沒有提到但是想要照顧的是邊界檢查(即確保你沒有寫過bufLen)。

關於標誌:一旦你寫了-,你需要否定這個值。此外,-需要從最終的逆轉中排除;另一種方法是在開始時記住標誌,但只在最後(在逆轉之前)寫下標誌。

最後一個角落案例是確保零寫出正確,即作爲0而不是一個空字符串。

+0

是的,謝謝。我已經做了檢查。寫出 - 以後也是一種選擇。 – fuz