将整数转换为字节串

Dan*_*n O 5 javascript string int

我有一个变量,我们称之为myNum,包含一个 32 位值。我想把它变成一个 4 字节的字符串,其中字符串的每个字节对应于myNum.

我正在尝试执行以下操作(不起作用):

var myNum = someFunctionReturningAnInteger();
var str = "";

str += String.charCodeFrom((myNum >>> 24) & 0xff);
str += String.charCodeFrom((myNum >>> 16) & 0xff);
str += String.charCodeFrom((myNum >>> 8) & 0xff);
str += String.charCodeFrom(myNum & 0xff);
Run Code Online (Sandbox Code Playgroud)

例如,如果myNum等于350则str会是什么样子0x000x000x010x5e当我检查它在Wireshark中。

charCodeFrom()只有当每个单独的字节都有一个值 <= 0x7f 时才做我想要的。有没有一种独立于浏览器的方式来做我想做的事情?

谢谢

Dav*_*ver 3

简而言之:你不能。

\n\n

更长:发生这种情况是因为字符串中任何值为 >= 的字符0x80都将使用浏览器的默认编码(可能是 UTF-8,但偶尔你会发现浏览器会选择“随机”的内容)编码为 un​​icode ”)。例如,如果您发送一个值为 的“字节” \\x80,您可能会\\xC2\\x80在线路上看到 (`"\\xC2\\x80".decode("utf-8") == u"\\u0080" )。

\n\n

您可以将页面编码设置为 CP1252 等 8 位编码,这可以(在某些浏览器中,当星星正确对齐时)引导浏览器在编码 JavaScript strings\xe2\x80\xa6 时使用相同的编码但这并不能保证跨浏览器兼容。

\n\n

一些更可靠的选择可能是:

\n\n
    \n
  • 设置端点以将来自 JS 的字符串解码为 un​​icode,然后将它们重新编码为字节(在 Python 中,类似于"".join(chr(ord(ub)) for ub in your_unicode_string)
  • \n
  • 将“字节”作为整数数组发送:var bytes = [ (myNum >> 24) & 0xFF, \xe2\x80\xa6 ];
  • \n
\n