资讯专栏INFORMATION COLUMN

websocket 二进制数据传输基础准备工作

LeviDing / 2716人阅读

摘要:例如,十进制数,用二进制表示则为。按位操作符操作数字的二进制形式,但是返回值依然是标准的数值。不同为真相同为假二进制按位异或运算从左到右按位非为真,为假对每一项进行非操作,遇真则假,遇假则真。

二进制与十六进制

二进制用 0 1 表示 2= 10
十六进制 前缀0x 用0123456789ABCDEF表示 2= 0x2
二进制与十六进制的转换
十六进制的每位 等于二进制的四位

十六进制 0xF = 15(十进制) = 1111(二进制) 
十六进制每位最大就是二进制的 1111 = 15(十进制)

二进制
2 = 10
十六进制
2 = 0x2 = 0010
规律很清晰了吧

20 = 10100(6位 口算得出要补齐8位)
0001 0100
0001 = 1
0100 = 4
20 = 0001 0100 = 0x14
二进制字节

一个字节是8个二进制位
0000 0000 - 1111 1111 = 0-255 代表一个字节可以表示256个字符

UTF编码字节 UTF-16

UTF-16大部分使用两个字节编码,编码超出 65535 的使用四个字节
0x0000 - 0xFFFF 两个字节
0x010000 - 0x10FFFF 四个字节

UTF-8

0x0000 - 0x007F 一个字节
0x0080 - 0x07FF 两个字节
0x0800 - 0xD7FF 、0xE000 - 0xFFFF 三个字节
0x010000 - 0x10FFFF 四个字节
注: Unicode在范围 D800-DFFF 中不存在任何字符

有符号32位整数节

所有的按位操作符的操作数都会被转成补码(two"s complement)形式的有符号32位整数。

反码、补码 负数

js中的二进制转换是不会转换符号的

1的反码 补码 以及 -1
1 = 0000 0000 0000 0000 0000 0000 0000 0001
反码 1 =0、0 =1 下面会讲述按位操作符 按位非 ~ 其实就是反码

1111 1111 1111 1111 1111 1111 1111 1110

补码后 末位+1

1111 1111 1111 1111 1111 1111 1111 1111 = -1
按位操作符

按位操作符(Bitwise operators) 将其操作数(operands)当作32位的比特序列(由0和1组成),而不是十进制、十六进制或八进制数值。例如,十进制数9,用二进制表示则为1001。按位操作符操作数字的二进制形式,但是返回值依然是标准的JavaScript数值。
&、| 在转码中比较常用

按位与 &

1为真,0为假 全真则真 遇假为假

js 内置方法
var a = 1;
a.toString(2);

十转二
2 = 10
3 = 11
二进制进行按位与运算 从左到右
1 && 1 = 1
0 && 1 = 0
2 & 3 = 10 = 2
按位或 |

1为真,0为假 遇真则真 全假为假

8 = 1000
9 = 1001
二进制按位或运算 从左到右
1 || 1 = 1
0 || 0 = 0
0 || 0 = 0
0 || 1 = 1  

8 | 9 = 1001 = 9
按位异或 ^

1为真,0为假。不同为真 相同为假

4 = 100
5 = 101
二进制按位异或运算 从左到右
1  1  = 0
0  0  = 0
0  1  = 1
4 ^ 5 = 001 = 1
按位非 ~

1为真,0为假 对每一项进行非操作,遇真则假,遇假则真。(速算, ~x =-1*x-1)

6 = 00000000 00000000 00000000 00000110
    11111111 11111111 11111111 11111001 = -7
按位移动操作符

有两个操作数 左侧为要被移动的数字(十进制,但是操作是内部对二进制操作)
右侧为移动的长度方向根据操作符移动,返回根据被操作数相同类型的结果,必须小于32位

左移操作符 <<

a << b 右侧末位开始补 b个0 左侧舍去b个位

11 = 00000000 00000000 00000000 00001011

11 << 2 
右侧末位开始补 b个0
00000000 00000000 00000000 00001011 00 
左侧舍去b个位
000000 00000000 00000000 00001011 00
格式化
00000000 00000000 00000000 00101100 = 44
-44 = 
(反码)11111111 11111111 11111111 11010011
(补码)11111111 11111111 11111111 11010100


-11 =
(反码)11111111 11111111 11111111 11110100 
(补码)11111111 11111111 11111111 11110101
-11 << 2
右侧末位开始补 b个0 
11111111 11111111 11111111 11110101 00 
左侧舍去b个位
111111 11111111 11111111 11110101 00
格式化
11111111 11111111 11111111 11010100 = -44
带符号右移操作符( 记住左侧首位 0 代表正 ,1 代表负) >>

a >> b 左侧首位开始补 b 个 首位值 右侧侧舍去b个位

12 = 00000000 00000000 00000000 00001100
12 >> 2
补 b 个 首位值 
00 00000000 00000000 00000000 00001100
右侧舍去b个位
00 00000000 00000000 00000000 000011
格式化
00000000 00000000 00000000 00000011 = 3
-3 = 
(反码)11111111 11111111 11111111 11111100
(补码)11111111 11111111 11111111 11111101

-12 >> 2
-12 = 
(反码)11111111 11111111 11111111 11110011
(补码)11111111 11111111 11111111 11110100
-12 >> 2
补 b 个 首位值 
11 11111111 11111111 11111111 11110100
右侧舍去b个位
11 11111111 11111111 11111111 111101
格式化
11111111 11111111 11111111 11111101 = -3

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109337.html

相关文章

  • webSocket 二进传输基础准备-UTF-16和UTF-8转Unicode

    摘要:前言今天来学习转,转以达成之间的互转。基本利用按位操作符符号运算符就可以完成。今天这里只做转,转,后续转换可以看前面的文章。基础准备工作转转转为了更好的理解,我们来使用转那一期的结果来进行转,转 前言 今天来学习UTF8转Unicode,UTF16转Unicode以达成UTF8,UTF16之间的互转。提炼成函数的公式我并没有放出来,我的目的只是为了更加理解 字符编码之间的关系。如果你需...

    张春雷 评论0 收藏0
  • JavaScript是如何工作: 深入探索 websocket 和HTTP/2与SSE +如何选择正

    摘要:数据作为消息通过传输,每个消息由一个或多个帧组成,其中包含正在发送的数据有效负载。帧数据如上所述,数据可以被分割成多个帧。但是,规范希望能够处理交错的控制帧。 文章底部分享给大家一套 react + socket 实战教程 这是专门探索 JavaScript 及其所构建的组件的系列文章的第5篇。 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 如果你错过了前面的章...

    cuieney 评论0 收藏0
  • 实战 swoole【聊天室】

    摘要:是一个请求对象,包含了客户端发来的握手请求信息事件函数中可以调用向客户端发送数据或者调用关闭连接事件回调是可选的当服务器收到来自客户端的数据帧时会回调此函数。 前言:了解概念之后就应该练练手啦,不然就是巨婴 有收获的话请加颗小星星,没有收获的话可以 反对 没有帮助 举报三连 代码仓库 实战swoole【聊天室】 在线体验 准备工作 需要先看初识swoole【上】,了解基本的服务端...

    andycall 评论0 收藏0
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择

    摘要:注意值得注意的是,一旦接收到所有帧并且原始消息有效载荷已被重建,客户端将仅被通知关于新消息。实验表明,在之后创建了第二个帧。以下值目前正在使用中代表继续帧。 这一次,我们将深入到通信协议的世界中,对比并讨论它们的属性并构建部件。我们将提供WebSockets和HTTP / 2的快速比较。 最后,我们分享一些关于如何选择网络协议。 概述 如今,拥有丰富动态用户界面的复杂网络应用程序被视为...

    calx 评论0 收藏0
  • 【译】 WebSocket 协议第七章——关闭连接(Closing the Connection)

    摘要:状态码当关闭一个连接时如在开始握手已经完成后,发送一个关闭帧,终端可能会说明关闭的原因。表示终端由于协议错误中止了连接。这个状态码是为了给上层应用表示连接被异常关闭如没有发送或者接受一个关闭帧这种场景的使用而设计的。 概述 本文为 WebSocket 协议的第七章,本文翻译的主要内容为 WebSocket 连接关闭相关内容。 关闭连接(协议正文) 7.1 定义 7.1.1 关闭 Web...

    Freeman 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<