Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将整数转换为字节字符串_Javascript_String_Int - Fatal编程技术网

Javascript 将整数转换为字节字符串

Javascript 将整数转换为字节字符串,javascript,string,int,Javascript,String,Int,我有一个变量,我们称它为myNum,包含一个32位的值。我想把它转换成一个4字节的字符串,其中字符串的每个字节对应于myNum的一部分 我正在尝试做以下类似的事情(不起作用): 例如,如果myNum等于350,那么当我在wireshark中检查它时,str看起来像0x00,0x00,0x01,0x5e charCodeFrom()仅当每个字节都有一个值时才执行我想要的操作简而言之:您不能 更详细地说:这是因为字符串中任何值>=0x80的字符都将使用浏览器的默认编码(可能是UTF-8,但偶尔您会发

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

我正在尝试做以下类似的事情(不起作用):

例如,如果
myNum
等于350,那么当我在wireshark中检查它时,
str
看起来像
0x00
0x00
0x01
0x5e

charCodeFrom()
仅当每个字节都有一个值时才执行我想要的操作简而言之:您不能

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

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

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

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

对问题的出色描述。但是,一旦字符串命中Javscript,它将是UTF16,因此还有另一层翻译问题。谢谢!而且,是的,在内部,“字节”将用UTF16编码…但是,除了字符串将占用两倍于您预期的内存这一事实之外,我想不出有什么问题会因此而具体引起…有什么问题吗?只需注意UTF8和UTF16编码是不同的,所以八位字节序列将不同。我不经常使用UTF16,但我非常确定
x80
将被编码为
\x00\x80
(UTF16),而不是
x\c2\x80
(UTF8)在内部,是的,这就是它的编码方式……但在网络上,浏览器将使用(通常,在大多数情况下)页面编码(可能是UTF-8)对其进行编码。
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);