2013-03-12 165 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/