如何将字符串转换为字节数组

130

我该如何使用 JavaScript 将字符串转换为 bytearray。输出结果应与下面的 C# 代码等价。

UnicodeEncoding encoding = new UnicodeEncoding();
byte[] bytes = encoding.GetBytes(AnyString);

由于UnicodeEncoding默认使用UTF-16与小端序。

编辑:我有一个要求,需要将客户端生成的字节数组与使用上述C#代码在服务器端生成的字节数组进行匹配。


3
JavaScript并不是以与BLOBs(二进制数据)易用而闻名的语言 - 为什么不直接将字符串作为JSON发送? - Marc Gravell
也许你可以在这里看一下:https://dev59.com/b3A75IYBdhLWcg3wo6he - V4Vendetta
2
JavaScript字符串是UTF-16编码的,你已经知道了吗? - Kevin
2
首先,为什么你需要将这个转换成JavaScript? - BreakHead
22
字符串没有被编码。是的,在内部它们被表示为字节并且有一种编码方式,但在脚本级别上这基本上没有意义。字符串是逻辑字符集合。要对一个字符进行编码,你必须明确地选择一个编码方案,然后使用它将每个字符代码转换为一个或多个字节序列。这个问题下面的答案是垃圾,因为它们调用charCodeAt并将其值插入到名为"bytes"的数组中。你好! charCodeAt返回的值可以大于255,所以不是一个字节! - Triynko
显示剩余4条评论
12个回答

-2

这里是@BrunoLM发布的相同函数转换为字符串原型函数的代码:

String.prototype.getBytes = function () {
  var bytes = [];
  for (var i = 0; i < this.length; ++i) {
    bytes.push(this.charCodeAt(i));
  }
  return bytes;
};

如果您将函数定义为这样,那么您可以在任何字符串上调用 .getBytes() 方法:
var str = "Hello World!";
var bytes = str.getBytes();

32
这仍然是错误的,就像所引用的答案一样。charCodeAt不会返回一个字节。将大于255的值推入名为“bytes”的数组没有意义,非常误导人。这个函数根本不执行编码操作,它只是将字符代码插入到一个数组中。要执行UTF16编码,您需要检查字符代码,决定是否需要用2个或4个字节来表示它(因为UTF16是可变长度编码),然后逐个将每个字节写入数组中。 - Triynko
9
修改原生数据类型的原型是不好的实践。 - Andrew Lundin
@AndrewLundin,这很有趣...谁说的? - Jerther
2
@Jerther:https://dev59.com/T2Yr5IYBdhLWcg3wAFg0为什么扩展原生对象是一种不良的编程实践 - Andrew Lundin

-3

不需要下划线,只需使用内置的map函数:

var string = 'Hello World!';

document.write(string.split('').map(function(c) { return c.charCodeAt(); }));


1
这将返回一个由16位数字组成的数组,表示字符串作为UTF-16代码点序列的形式。虽然这不是OP所要求的,但至少可以帮助你一部分地实现目标。 - Daniel Cassidy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接