2011-09-03 26 views
1

我有下面的代碼在Node.js的逃生%d:的Javascript:在字符串

var str = '', 
    ch; 

for(/*standard for loop*/){ 
// some code ... 

ch = '%' + buffer[i].toString(16); 

str += ch; 
} 

現在,當buffer[i].toString(16)回報,讓我們說d6,導致字符串不包含%d6,但NaN6代替。

現在我知道%d用在C的sprinf中,但afaik JavaScript和Node都有sprintf或等價函數。

我需要%d6在我的字符串,所以我能做些什麼來防止JS自動將%d(和其他人,如%f)轉換爲NaN?

+0

NaN不代表數字。它通常發生在您嘗試將數字函數應用於字符串時。 –

+0

他可能爲了自己的目的使用toString(),因爲toString()應該沒有參數(16)。用我的解決方案。 –

+0

參數16意味着他想要返回一個十六進制數字:http://www.w3schools.com/jsref/jsref_tostring_number.asp –

回答

0

Node的console.log() - 用於輸出的標準函數 - 我用來輸出結果的行爲與printf相同,並且實際上已記錄(http://nodejs.org/docs/v0.4.11/api/stdio.html#console.log)。愚蠢的我,感謝每個人把我帶到解決方案。

sys.puts()打印預期的字符串。

+0

你也可以通過加倍或者插入原始字符串來逃避'%'符號:'console.log(「解釋這些%%符號,插入一個%s。」,「%」)' –

0

你不能使用toString方法爲你自己的purproses,因爲JS已經擁有了自己的名字。

  1. 將firefox更新到最新版本。還要確保你使用的是Firefox。
  2. 我測試過了,你的解決方案應該可以工作。請警惕()一切。

什麼是輸出:

ch = '%' + buffer[i].toString(16); 
alert(ch); 
alert(buffer[i]); 
alert(buffer[i].toString(16)); 
+2

Docs另有說明:https://developer.mozilla.org/en/JavaScript/Reference/ toString toString()沒問題,它返回正確的字符串,並且如果我不將它連接到%符號,一切正常。當toString()返回帶有第一個字符'd'或'f'的字符串時,我只遇到了這個問題。與其他字符(a,b,...)它工作得很好。 – usoban

+1

如果是這樣,你有什麼值debuff:buffer [i] –

+0

ascii 223 char,toString()返回十六進制字符串'df'。在用'%'進行連接後,它被轉換爲NaN。 – usoban

0

的錯誤不是在你粘貼代碼,如果我們做一個簡單的測試:

function test() 
{ 
    var stuff = 214; 
    var str = '', ch; 

    ch = '%' + stuff.toString(16); 
    alert(ch); 
} 

我們看到,我們所希望實際返回的是(%d6)。

NaN代表不是數字,你確定你的緩衝區數組是什麼?你是否在調用任何其他方法/函數?

+0

在Chrome調試器中運行代碼運行良好。事實上,問題出在節點的console.log中,其行爲與printf相同。愚蠢的我。 – usoban