将整数转换为字节串

时间:2012-09-07 19:10:54

标签: 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);

例如,如果myNum等于350,则str看起来像0x000x000x010x5e当我在wireshark中检查它。

charCodeFrom()只在每个字节的值为< = 0x7f时执行我想要的操作。是否有与浏览器无关的方式来做我想做的事情?

感谢

1 个答案:

答案 0 :(得分:3)

简而言之:你做不到。

更长时间:发生这种情况是因为字符串中值为> = 0x80的任何字符都将使用浏览器的默认编码编码为unicode(可能是UTF-8,但有时您会找到一个浏览器选择“随机”的东西。例如,如果发送值为\x80的“字节”,则可能会在电汇上看到\xC2\x80(`“\ xC2 \ x80”.decode(“utf-8”)= = u“\ u0080”)。

您可以将页面编码设置为8位编码,如CP1252,可以(在某些浏览器中,当星星正确对齐时)哄骗浏览器在编码JavaScript字符串时使用相同的编码......但是不能保证跨浏览器兼容。

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

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