如何反转String.fromCharCode?

时间:2010-01-15 13:04:45

标签: javascript char reverse

String.fromCharCode(72)给出H.如何从char H获得数字72?

6 个答案:

答案 0 :(得分:56)

'H'.charCodeAt(0)

答案 1 :(得分:9)

使用charCodeAt:

var str = 'H';
var charcode = str.charCodeAt(0);

答案 2 :(得分:7)

您可以像这样定义自己的全局函数:

function CHR(ord)
{
    return String.fromCharCode(ord);
}

function ORD(chr)
{
    return chr.charCodeAt(0);
}

然后像这样使用它们:

var mySTR = CHR(72);

var myNUM = ORD('H');

(如果您想在代码中多次使用它们,或/或在代码中使用它们很多。)

答案 3 :(得分:7)

@ Silvio的答案仅适用于高达0xFFFF的代码点(最终是String.fromCharCode可以输出的最大值)。你不能总是假设一个角色的长度是一个:

''.length
-> 2

这是有用的:

var utf16ToDig = function(s) {
    var length = s.length;
    var index = -1;
    var result = "";
    var hex;
    while (++index < length) {
        hex = s.charCodeAt(index).toString(16).toUpperCase();
        result += ('0000' + hex).slice(-4);
    }
    return parseInt(result, 16);
}

使用它:

utf16ToDig('').toString(16)
-> "d800df30"

(来自https://mothereff.in/utf-8的灵感)

答案 4 :(得分:1)

String.fromCharCode接受多个参数,因此这是有效的:

const binaryArray = [10, 24] // ...
str = String.fromCharCode(...binaryArray)

如果您正在寻找与之相反的 (就像我以前一样),这可能会派上用场:

const binaryArray = str
  .split('')
  .reduce((acc, next) =>
    [...acc, next.charCodeAt(0)],
    []
  )

答案 5 :(得分:0)

如果您必须考虑编码,请注意 charCodeAt 对象中的 String 方法将默认为 utf16 编码。您可以使用 string_decoder 对象和 Node.js Buffer 对象的编码参数来应用特定的编码。

即使使用 utf-8 编码的 charCodeAt 对象,String 方法也仅提供 ascii/utf-16 编码:

str=new String(new Buffer([195,169]))
// -> [String: 'é']
str.charCodeAt(0)
// -> 233

使用 fromCharCode 构建字符串不会像预期的那样正确 UTF-16 :

myStr=String.fromCharCode(50089, 65, 233)
// -> '쎩Aé'
Buffer.from(myStr, 'utf-8')
// -> <Buffer ec 8e a9 41 c3 a9>
Buffer.from(myStr, 'ascii')
// -> <Buffer a9 41 e9>
myStr.charCodeAt(0)
// -> 50089
myStr.charCodeAt(2)
// -> 233

这是一个简单的例子来编码和解码 UTF8 字节和 ASCII 字节:

var dec=new string_decoder.StringDecoder('utf-8');
dec.write(Buffer.from([65,67,195,169,98]));
// -> 'ACéb'
var theBytes=new Buffer('aéé','utf-8'); 
// -> <Buffer 61 c3 a9 c3 a9>
var dec=new string_decoder.StringDecoder('ascii')
dec.write(Buffer.from([65,67,195,169,98]))
// -> 'ACC)b'
var theBytes=new Buffer('aéé','ascii')
// -> <Buffer 61 e9 e9>

StringDecoder.write 方法将从提供的字节缓冲区中返回一个 String 对象。

Buffer 对象的编码参数为您提供了一种从提供的字符串中获取带有编码字节的 Buffer 对象提要的方法。

所以要得到字符 'H' 的 ASCII 编码:

new Buffer('H','ascii');
// -> <Buffer 48>
new Buffer('H','ascii')[0];
// -> 72

那样,你也可以处理多字节编码的字符:

new Buffer('é','ascii');
// -> <Buffer e9>
arr=new Buffer('é','ascii');
// -> <Buffer e9>
code=arr.readUIntBE(0,arr.length);
// -> 233
code.toString(16);
// -> 'e9'
new Buffer('é','utf-8');
// -> <Buffer c3 a9>
arr=new Buffer('é','utf-8');
// -> <Buffer c3 a9>
code=arr.readUIntBE(0,arr.length);
// -> 50089
code.toString(16)
// -> 'c3a9'