websocket 二進位制資料傳輸基礎準備工作

咕咕gu發表於2019-04-03

二進位制與十六進位制

二進位制用 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
複製程式碼

1.基礎準備工作

2.Unicode轉UTF16和UTF8

3.UTF-16和UTF-8轉Unicode

相關文章