2013-03-12 169 views
2

是否可以使用java腳本將雙字節整數轉換爲單字節? 我需要將雙字節數字轉換爲單字節,當它被輸入到文本框中。是否有任何方法可用於jQuery或JavaScript。將雙字節整數轉換爲單字節-Javascript

+0

你是什麼意思的「轉換雙字節數爲單字節......」拋開了JavaScript的數字是所有浮點(這並不意味着你不能做整數數學),如果你這樣做,你肯定會遇到雙字節(16位)整數可以存儲0..65,535(或-32,768..32,767)範圍內的值的問題,而單字節(8位)整數只能存儲0..255(或-128..127)範圍內的值。 – 2013-03-12 11:16:01

+0

我想將1234轉換爲1234,第一個是雙字節 – Shin 2013-03-12 11:18:31

+0

@ shn:* Digits *,你的意思是?如數字字符? – 2013-03-12 11:19:49

回答

2

沒有內置的方法將1(U+FF11)轉換爲1(U+0031)。你可以使用正則表達式你提到的人物做具體

var rex = /[\uFF10-\uFF19]/g; 
var str = "1234"; 

console.log("Before: " + str); 
str = str.replace(rex, function(ch) { 
    return String.fromCharCode(ch.charCodeAt(0) - 65248); 
}); 

console.log("After: " + str); 

Live Example(一定要打開JavaScript控制檯)| Source

+0

看到我的答案如何做到這一點。 – silver 2014-04-28 05:35:33

0

爲什麼你不能轉換它? 65296是你的神奇數字,表格永遠不會改變,所以只需上下運行,你就可以用這種方式轉換數字。

這會將單個字節轉換爲雙字節並再次返回。

這個例子需要jquery,但是你可以寫它不太容易。

<input type="text" id="one" value="1234567890"><br/> 
<input type="text" id="two"><br/> 
<input type="text" id="three"> 

<script> 
    symbolsToEntities=function(sText){ 
     var sNewText = ""; 
     var iLen = sText.length; 
     for (i=0; i<iLen; i++){ 
     iCode = sText.charCodeAt(i); 
      sNewText += (iCode > 256? "&#" + iCode + ";": sText.charAt(i)); 
     }; 
     return sNewText; 
    }; 

    ConvertNumber=function(num){ 
     var O=''; 
     for (var i = 0, len = num.length; i < len; i++){ 
      O+='&#'+(parseInt(num[i])+65296)+';'; 
     }; 
     return O; 
    }; 

    ConvertNumberagain=function(num){ 
     var O=''; 
     var res = num.split(';'); 
     $.each(res, function(key, value){ 
      if (value.length!=0){ 
       O+=parseInt(value.replace('&#',''))-65296; 
      }; 
     }); 
     return O; 
    }; 
    var doublebyte=ConvertNumber($('#one').val()); 
    doublebyte = $('<div>').html(doublebyte).text(); 
    $('#two').val(doublebyte); 
    var singlebyte=symbolsToEntities($('#two').val()); 
    singlebyte=ConvertNumberagain(singlebyte); 
    $('#three').val(singlebyte); 
</script> 

活生生的例子:http://jsfiddle.net/399EM/