文章目录

  • 一、 "海明码" 工作原理
  • 二、 "海明码" 工作流程
  • 三、 确定校验码位数
  • 四、 确定校验码和数据位置
    • 0、 确定校验码位置
    • 1、 引入二进制位
    • 2、 P1 校验位 计算
    • 3、 P2 校验位 计算
    • 4、 P3 校验位 计算
    • 5、 P4 校验位 计算
    • 6、 最终海明码结果
  • 五、 检错纠错
    • 1、 P1 校验位 校验
    • 2、 P2 校验位 校验
    • 3、 P3 校验位 校验
    • 4、 P4 校验位 校验
    • 5、 纠错

一、 “海明码” 工作原理


海明码 可以 发现 双比特错误 , 但只能纠正 单比特错误 ;

海明码 工作原理 :

① 添加校验码 : 发送数据 , 在数据中加入 冗余信息 ( 冗余码 / 校验码 ) ;

② 校验码作用 : 每个 校验码 不仅可以校验本身的信息 , 还可以同时校验多为信息 ;

③ 比特位 多重校验 : 某些 比特位 可以 同时被多个校验码校验 ;

④ 检查差错 : 如果这个被多位校验码校验的比特位 出现错误 , 那么多个校验码校验时 , 就会知道数据 出现差错 ;

⑤ 定位差错 : 每个校验码逐个校验 , 最终能 定位出是哪个比特位出现了差错 , 从而将其纠正 ;

二、 “海明码” 工作流程


"海明码" 工作流程 :

  • 确定校验码位数
  • 确定校验码位置 和 数据位置
  • 求校验码值
  • 检错纠错

三、 确定校验码位数


海明不等式 : 2r≥k+r+12^r \geq k+r+12r≥k+r+1

  • rrr 是冗余信息位
  • kkk 是信息位

根据信息位位数 , 求出满足 海明不等式 最小的 r ;

确定校验码位数示例 : 发送数据 101101101101101101 , 求海明码位数 ;

① 数据位数 : k=6k = 6k=6 ;

② 将数据位数代入海明不等式 : 2r≥6+r+12^r \geq 6+r+12r≥6+r+1

③ 满足海明不等式最小 rrr 计算 : 2r≥7+r2^r \geq 7+r2r≥7+r , 依次从 111 开始代入 , 获取满足不等式最小的 rrr 的值为 444 ;

④ 发送数据 : 发送的数据 海明码 是 101010 位 , 其中 原始数据有 666 位 , 校验码有 444 位 ;

四、 确定校验码和数据位置


0、 确定校验码位置


确定校验码和数据位置 : 发送数据 101101101101101101 , 海明码位数 为 101010 位 ;

① 校验码 444 位 : P1P_1P1​ , P2P_2P2​ , P3P_3P3​ , P4P_4P4​ ;

② 数据位 666 位 : D1D_1D1​ , D2D_2D2​ , D3D_3D3​ , D4D_4D4​ , D5D_5D5​ , D6D_6D6​ ;

③ 校验码位置 : 校验码 只能放在 222 的幂次方位置 , 如 20=12^0 = 120=1 , 21=22^1 = 221=2 , 22=42^2 = 422=4 , 23=82^3 =823=8 , 2n2^n2n等位置 ;

④ 数据位置 : 数据位 按照顺序依次 放在 非校验码位置上 ;

⑤ 最终生成的数据位 :

数据位索引 1 2 3 4 5 6 7 8 9 10
名称 P1P_1P1​ P2P_2P2​ D1D_1D1​ P3P_3P3​ D2D_2D2​ D3D_3D3​ D4D_4D4​ P4P_4P4​ D5D_5D5​ D6D_6D6​
实际值 P1P_1P1​ P2P_2P2​ 111 P3P_3P3​ 000 111 111 P4P_4P4​ 000 111

1、 引入二进制位


求校验码值 :

在表格中引入二进制位 : 二进制的位数 就是 以 能代表 最大的序列索引的位数为准 , 如 该 数据 有 101010 位 , 最大索引值是 101010 , 对应二进制时 101010101010 , 需要 444 位二进制数表示 , 这里的二进制位数是 444 ;

二进制位 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010
数据位索引 1 2 3 4 5 6 7 8 9 10
名称 P1P_1P1​ P2P_2P2​ D1D_1D1​ P3P_3P3​ D2D_2D2​ D3D_3D3​ D4D_4D4​ P4P_4P4​ D5D_5D5​ D6D_6D6​
实际值 P1P_1P1​ P2P_2P2​ 111 P3P_3P3​ 000 111 111 P4P_4P4​ 000 111

2、 P1 校验位 计算


P1P_1P1​ 校验的位 计算 : P1P_1P1​ 对应的二进制位是 000100010001 , 第一位是 111 , 查看 哪些 二进制位 的数据位 第 111 位是 111 ;

  • 数据位索引 333 : 001001001111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D1D_1D1​ 位 , 值为 111 ;
  • 数据位索引 555 : 010010010111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D2D_2D2​ 位 , 值为 000 ;
  • 数据位索引 777 : 011011011111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D4D_4D4​ 位 , 值为 111 ;
  • 数据位索引 999 : 100100100111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D5D_5D5​ 位 , 值为 000 ;

令所有要校验的位 异或 ( ⊕\oplus⊕ ) 计算后为 000 ;

异或计算 ⊕\oplus⊕ : 同 000 , 异 111 , 两个位不同时为 111 , 两个位相同时为 000 ;

D1⊕D2⊕D4⊕D5⊕P1=01⊕0⊕1⊕0⊕P1=01⊕1⊕0⊕P1=00⊕0⊕P1=00⊕P1=0\begin{array}{lcl}D_1 \oplus D_2 \oplus D_4 \oplus D_5 \oplus P_1 &=& 0 \\\\ 1 \oplus 0 \oplus 1 \oplus 0 \oplus P_1 &=& 0 \\\\ 1 \oplus 1 \oplus 0 \oplus P_1 &=& 0 \\\\ 0 \oplus 0 \oplus P_1 &=& 0 \\\\ 0 \oplus P_1 &=& 0 \end{array}D1​⊕D2​⊕D4​⊕D5​⊕P1​1⊕0⊕1⊕0⊕P1​1⊕1⊕0⊕P1​0⊕0⊕P1​0⊕P1​​=====​00000​

P1=0P_1 = 0P1​=0 才能使上述式子成立 , 因此 校验位 P1=0P_1 = 0P1​=0 ;

3、 P2 校验位 计算


P2P_2P2​ 校验的位 计算 : P2P_2P2​ 对应的二进制位是 001000100010 , 第二位是 111 , 查看 哪些 二进制位 的数据位 第 222 位是 111 ;

  • 数据位索引 333 : 000000111111 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D1D_1D1​ 位 , 值为 111 ;
  • 数据位索引 666 : 010101111000 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D3D_3D3​ 位 , 值为 111 ;
  • 数据位索引 777 : 010101111111 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D4D_4D4​ 位 , 值为 111 ;
  • 数据位索引 101010 : 101010111000 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D6D_6D6​ 位 , 值为 111 ;

D1⊕D3⊕D4⊕D6⊕P2=01⊕1⊕1⊕1⊕P2=00⊕1⊕1⊕P2=01⊕1⊕P2=00⊕P2=0\begin{array}{lcl}D_1 \oplus D_3 \oplus D_4 \oplus D_6 \oplus P_2 &=& 0 \\\\ 1 \oplus 1 \oplus 1 \oplus 1 \oplus P_2 &=& 0 \\\\ 0 \oplus 1 \oplus 1 \oplus P_2 &=& 0 \\\\ 1 \oplus 1 \oplus P_2 &=& 0 \\\\ 0 \oplus P_2 &=& 0 \end{array}D1​⊕D3​⊕D4​⊕D6​⊕P2​1⊕1⊕1⊕1⊕P2​0⊕1⊕1⊕P2​1⊕1⊕P2​0⊕P2​​=====​00000​

P2=0P_2 = 0P2​=0 才能使上述式子成立 , 因此 校验位 P2=0P_2 = 0P2​=0 ;

4、 P3 校验位 计算


P3P_3P3​ 校验的位 计算 : P3P_3P3​ 对应的二进制位是 010001000100 , 第 333 位是 111 , 查看 哪些 二进制位 的数据位 第 333 位是 111 ;

  • 数据位索引 555 : 000111010101 , 二进制的第 333 位是 111 , 红色部分 ; 对应数据位 D2D_2D2​ 位 , 值为 000 ;
  • 数据位索引 666 : 000111101010 , 二进制的第 333 位是 111 , 红色部分 ; 对应数据位 D3D_3D3​ 位 , 值为 111 ;
  • 数据位索引 777 : 000111011011011 , 二进制的第 333 位是 111 , 红色部分 ; 对应数据位 D4D_4D4​ 位 , 值为 111 ;

D2⊕D3⊕D4⊕P3=00⊕1⊕1⊕P3=01⊕1⊕P3=00⊕P3=0\begin{array}{lcl}D_2 \oplus D_3 \oplus D_4 \oplus P_3 &=& 0 \\\\ 0 \oplus 1 \oplus 1 \oplus P_3 &=& 0 \\\\ 1 \oplus 1 \oplus P_3 &=& 0 \\\\ 0 \oplus P_3 &=& 0 \end{array}D2​⊕D3​⊕D4​⊕P3​0⊕1⊕1⊕P3​1⊕1⊕P3​0⊕P3​​====​0000​

P3=0P_3 = 0P3​=0 才能使上述式子成立 , 因此 校验位 P3=0P_3 = 0P3​=0 ;

5、 P4 校验位 计算


P4P_4P4​ 校验的位 计算 : P4P_4P4​ 对应的二进制位是 100010001000 , 第 444 位是 111 , 查看 哪些 二进制位 的数据位 第 444 位是 111 ;

  • 数据位索引 999 : 111001001001 , 二进制的第 444 位是 111 , 红色部分 ; 对应数据位 D5D_5D5​ 位 , 值为 000 ;
  • 数据位索引 101010 : 111010010010 , 二进制的第 444 位是 111 , 红色部分 ; 对应数据位 D6D_6D6​ 位 , 值为 111 ;

D5⊕D6⊕P4=00⊕1⊕P4=01⊕P4=0\begin{array}{lcl}D_5 \oplus D_6 \oplus P_4 &=& 0 \\\\ 0 \oplus 1 \oplus P_4 &=& 0 \\\\ 1 \oplus P_4 &=& 0 \end{array}D5​⊕D6​⊕P4​0⊕1⊕P4​1⊕P4​​===​000​

P4=1P_4 = 1P4​=1 才能使上述式子成立 , 因此 校验位 P4=1P_4 = 1P4​=1 ;

6、 最终海明码结果


计算出的四个校验码 :

  • P1=0P_1 = 0P1​=0
  • P2=0P_2 = 0P2​=0
  • P3=0P_3 = 0P3​=0
  • P4=1P_4 = 1P4​=1

将上述校验码填写到表格中 :

二进制位 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010
数据位索引 1 2 3 4 5 6 7 8 9 10
名称 P1P_1P1​ P2P_2P2​ D1D_1D1​ P3P_3P3​ D2D_2D2​ D3D_3D3​ D4D_4D4​ P4P_4P4​ D5D_5D5​ D6D_6D6​
实际值 P1=0P_1 = 0P1​=0 P2=0P_2 = 0P2​=0 111 P3=0P_3=0P3​=0 000 111 111 P4=1P_4=1P4​=1 000 111

最终海明码为 : 000000111000011011011111010101 , 蓝色是数据位 , 红色是校验位 ;

五、 检错纠错


发送的正确的海明码数据是 : 000000111000011011011111010101 , 蓝色是数据位 , 红色是校验位 ;

海明码数据表格是 :

二进制位 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010
数据位索引 1 2 3 4 5 6 7 8 9 10
名称 P1P_1P1​ P2P_2P2​ D1D_1D1​ P3P_3P3​ D2D_2D2​ D3D_3D3​ D4D_4D4​ P4P_4P4​ D5D_5D5​ D6D_6D6​
实际值 P1=0P_1 = 0P1​=0 P2=0P_2 = 0P2​=0 111 P3=0P_3=0P3​=0 000 111 111 P4=1P_4=1P4​=1 000 111

假设 海明码 第 555 位出现错误 , D2D_2D2​ 数据原来是 000 , 出现错误变成 111 ;

正确海明码 : 000000111000011011011111010101

错误海明码 : 000000111000111111111111010101 , 第 555 位 的 000 变成了 111 ;

检错过程 : 444 个检验位 , 每个检验位 , 令所有要校验的位进行异或 ⊕\oplus⊕ 运算 ;

错误海明码数据表格是 :

二进制位 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010
数据位索引 1 2 3 4 5 6 7 8 9 10
名称 P1P_1P1​ P2P_2P2​ D1D_1D1​ P3P_3P3​ D2D_2D2​ D3D_3D3​ D4D_4D4​ P4P_4P4​ D5D_5D5​ D6D_6D6​
实际值 P1=0P_1 = 0P1​=0 P2=0P_2 = 0P2​=0 111 P3=0P_3=0P3​=0 111( 错误位 ) 111 111 P4=1P_4=1P4​=1 000 111

1、 P1 校验位 校验


P1P_1P1​ 校验的位 计算 : P1P_1P1​ 对应的二进制位是 000100010001 , 第一位是 111 , 查看 哪些 二进制位 的数据位 第 111 位是 111 ;

  • 数据位索引 333 : 001001001111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D1D_1D1​ 位 , 值为 111 ;
  • 数据位索引 555 : 010010010111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D2D_2D2​ 位 , 值为 111 ;
  • 数据位索引 777 : 011011011111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D4D_4D4​ 位 , 值为 111 ;
  • 数据位索引 999 : 100100100111 , 二进制的第一位是 111 , 红色部分 ; 对应数据位 D5D_5D5​ 位 , 值为 000 ;

令所有要校验的数据位 和 校验位 , 异或 ( ⊕\oplus⊕ ) 计算后为 000 ;

异或计算 ⊕\oplus⊕ : 同 000 , 异 111 , 两个位不同时为 111 , 两个位相同时为 000 ;

D1⊕D2⊕D4⊕D5⊕P1=1⊕1⊕1⊕0⊕0=0⊕1⊕0⊕0=1⊕0⊕0=1⊕0=1\begin{array}{lcl} &&D_1 \oplus D_2 \oplus D_4 \oplus D_5 \oplus P_1 \\\\ &=& 1 \oplus 1 \oplus 1 \oplus 0 \oplus 0 \\\\ &=& 0 \oplus 1 \oplus 0 \oplus 0 \\\\ &=& 1 \oplus 0 \oplus 0 \\\\ &=& 1 \oplus 0 \\\\ &=& 1 \end{array}​=====​D1​⊕D2​⊕D4​⊕D5​⊕P1​1⊕1⊕1⊕0⊕00⊕1⊕0⊕01⊕0⊕01⊕01​

P1P_1P1​ 校验位 校验出错 ; D1,D2,D4,D5D_1 , D_2, D_4, D_5D1​,D2​,D4​,D5​ 位中 , 有错误出现 ;

2、 P2 校验位 校验


P2P_2P2​ 校验的位 计算 : P2P_2P2​ 对应的二进制位是 001000100010 , 第二位是 111 , 查看 哪些 二进制位 的数据位 第 222 位是 111 ;

  • 数据位索引 333 : 000000111111 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D1D_1D1​ 位 , 值为 111 ;
  • 数据位索引 666 : 010101111000 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D3D_3D3​ 位 , 值为 111 ;
  • 数据位索引 777 : 010101111111 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D4D_4D4​ 位 , 值为 111 ;
  • 数据位索引 101010 : 101010111000 , 二进制的第 222 位是 111 , 红色部分 ; 对应数据位 D6D_6D6​ 位 , 值为 111 ;

D1⊕D3⊕D4⊕D6⊕P2=1⊕1⊕1⊕1⊕0=0⊕1⊕1⊕0=1⊕1⊕0=0⊕0=0\begin{array}{lcl} &&D_1 \oplus D_3 \oplus D_4 \oplus D_6 \oplus P_2 \\\\ &=& 1 \oplus 1 \oplus 1 \oplus 1 \oplus 0 \\\\ &=& 0 \oplus 1 \oplus 1 \oplus 0 \\\\ &=& 1 \oplus 1 \oplus 0 \\\\ &=& 0 \oplus 0 \\\\ &=& 0 \end{array}​=====​D1​⊕D3​⊕D4​⊕D6​⊕P2​1⊕1⊕1⊕1⊕00⊕1⊕1⊕01⊕1⊕00⊕00​

P2P_2P2​ 校验位 校验正确 ; D1,D3,D4,D6D_1 , D_3, D_4, D_6D1​,D3​,D4​,D6​ 位数据正确 ;

3、 P3 校验位 校验


P3P_3P3​ 校验的位 计算 : P3P_3P3​ 对应的二进制位是 010001000100 , 第 333 位是 111 , 查看 哪些 二进制位 的数据位 第 333 位是 111 ;

  • 数据位索引 555 : 000111010101 , 二进制的第 333 位是 111 , 红色部分 ; 对应数据位 D2D_2D2​ 位 , 值为 111 ;
  • 数据位索引 666 : 000111101010 , 二进制的第 333 位是 111 , 红色部分 ; 对应数据位 D3D_3D3​ 位 , 值为 111 ;
  • 数据位索引 777 : 000111011011011 , 二进制的第 333 位是 111 , 红色部分 ; 对应数据位 D4D_4D4​ 位 , 值为 111 ;

D2⊕D3⊕D4⊕P3=1⊕1⊕1⊕0=0⊕1⊕0=1⊕0=1\begin{array}{lcl} &&D_2 \oplus D_3 \oplus D_4 \oplus P_3 \\\\ &=& 1 \oplus 1 \oplus 1 \oplus 0 \\\\ &=& 0 \oplus 1 \oplus 0 \\\\ &=& 1 \oplus 0 \\\\ &=& 1 \end{array}​====​D2​⊕D3​⊕D4​⊕P3​1⊕1⊕1⊕00⊕1⊕01⊕01​

P3P_3P3​ 校验位 校验出错 ; D2,D3,D4D_2 , D_3, D_4D2​,D3​,D4​ 位中 , 有错误出现 ;

4、 P4 校验位 校验


P4P_4P4​ 校验的位 计算 : P4P_4P4​ 对应的二进制位是 100010001000 , 第 444 位是 111 , 查看 哪些 二进制位 的数据位 第 444 位是 111 ;

  • 数据位索引 999 : 111001001001 , 二进制的第 444 位是 111 , 红色部分 ; 对应数据位 D5D_5D5​ 位 , 值为 000 ;
  • 数据位索引 101010 : 111010010010 , 二进制的第 444 位是 111 , 红色部分 ; 对应数据位 D6D_6D6​ 位 , 值为 111 ;

D5⊕D6⊕P4=0⊕1⊕1=1⊕1=0\begin{array}{lcl} &&D_5 \oplus D_6 \oplus P_4 \\\\ &=& 0 \oplus 1 \oplus 1 \\\\ &=& 1 \oplus 1 \\\\ &=& 0 \end{array}​===​D5​⊕D6​⊕P4​0⊕1⊕11⊕10​

P4P_4P4​ 校验位 校验正确 ; D5,D6D_5, D_6D5​,D6​ 位数据正确 ;

5、 纠错


校验结果 :

  • P1P_1P1​ 校验位 校验出错 ; D1,D2,D4,D5D_1 , D_2, D_4, D_5D1​,D2​,D4​,D5​ 位中 , 有错误出现 ;
  • P2P_2P2​ 校验位 校验正确 ; D1,D3,D4,D6D_1 , D_3, D_4, D_6D1​,D3​,D4​,D6​ 位数据正确 ;
  • P3P_3P3​ 校验位 校验出错 ; D2,D3,D4D_2 , D_3, D_4D2​,D3​,D4​ 位中 , 有错误出现 ;
  • P4P_4P4​ 校验位 校验正确 ; D5,D6D_5, D_6D5​,D6​ 位数据正确 ;

综合上面 444 次校验结果 , 发现 D2D_2D2​ 数据错误 , 将下面的表格中的 D2D_2D2​ 错误纠正 , 由 111 纠正成 000 即可 ;

错误海明码数据表格是 :

二进制位 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010
数据位索引 1 2 3 4 5 6 7 8 9 10
名称 P1P_1P1​ P2P_2P2​ D1D_1D1​ P3P_3P3​ D2D_2D2​ D3D_3D3​ D4D_4D4​ P4P_4P4​ D5D_5D5​ D6D_6D6​
实际值 P1=0P_1 = 0P1​=0 P2=0P_2 = 0P2​=0 111 P3=0P_3=0P3​=0 111( 错误位 ) 111 111 P4=1P_4=1P4​=1 000 111

正确海明码数据表格是 :

二进制位 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010
数据位索引 1 2 3 4 5 6 7 8 9 10
名称 P1P_1P1​ P2P_2P2​ D1D_1D1​ P3P_3P3​ D2D_2D2​ D3D_3D3​ D4D_4D4​ P4P_4P4​ D5D_5D5​ D6D_6D6​
实际值 P1=0P_1 = 0P1​=0 P2=0P_2 = 0P2​=0 111 P3=0P_3=0P3​=0 000( 纠错后的结果 ) 111 111 P4=1P_4=1P4​=1 000 111

最终将错误的海明码 000000111000111111111111010101 ( 第 555 位 的 000 变成了 111 ) , 纠正 为 正确的海明码 000000111000011011011111010101 ;

【计算机网络】数据链路层 : 差错控制 ( 纠错编码 | 海明码 | “海明码“ 原理 | “海明码“ 工作流程 | 确定校验啊位数 | 确定校验码和数据位置 | 求校验码值 | 检错纠错 )★相关推荐

  1. 【SemiDrive源码分析】【X9芯片启动流程】12 - freertos_safetyos目录Cortex-R5 DIL2.bin 之 sdm_display_init 显示初始化源码分析

    [SemiDrive源码分析][X9芯片启动流程]12 - freertos_safetyos目录Cortex-R5 DIL2.bin 之 sdm_display_init 显示初始化源码分析 一.s ...

  2. Vue - 实现微信扫码登录功能(项目植入微信扫码登录功能)超详细完整流程详解及详细代码及注释,附带完整功能源码、常见问题解决方案

    前言 如果您需要 Nuxt.js 版本的教程,请访问 Nuxt.js - 微信扫码登录功能. 网上的大部分教程都太乱且没有任何注释和解释,对于新手而言简直是根本无从下手, 本文将站在新手小白的角度,从 ...

  3. Nuxt - 实现微信扫码登录功能(SSR 服务端渲染项目植入微信扫码登录功能)超详细完整流程详解及详细代码及注释,附带完整功能源码、常见问题解决方案

    前言 如果您需要 Vue.js 版本的教程,请访问 Vue.js - 微信扫码登录功能. 网上的大部分教程都太乱且没有任何注释和解释,对于新手而言简直是根本无从下手, 本文将站在新手小白的角度,从 0 ...

  4. 计算机网络-数据链路层功能概述

    数据链路层的研究思想 基本概念 结点: 主机, 路由器 链路: 网络中两个结点之间的物理通道, 链路的传输介质主要有双绞线, 光纤 和微波, 分为有线链路和无线链路 数据链路: 网络中两个结点的逻辑通 ...

  5. 计算机网络 | 数据链路层 局域网

    文章目录 链路层和局域网 一.引论和服务 1.引论 1.1 导引 1.2 数据链路层和局域网 1.3 一些术语 2.链路层: 上下文 2.1 传输类比 3.链路层服务(即需要解决的问题) 3.1 数据 ...

  6. 收款神器!解读聚合收款码背后的原理,你都知道吗?

    微信/支付宝收款码大家应该不会陌生,线下小微商户收款大多使用这个,就比如下图. 这种收款方式很方便,微信.支付宝后台申请开通,然后还可以免费申请相关物料. 不过这种方式用户体验其实不是很好,之前有好几 ...

  7. 收款神器!解读聚合收款码背后的原理

    Hello,我是楼下小黑哥! 今天跟大家分享一下聚合收款码的支付原理,这也是我这大半年来一直在做的项目. 微信/支付宝收款码大家应该不会陌生,线下小微商户收款大多使用这个,就比如下图. 这种收款方式很 ...

  8. 【SemiDrive源码分析】【X9芯片启动流程】30 - AP1 Android Kernel 启动流程 start_kernel 函数详细分析(一)

    [SemiDrive源码分析][X9芯片启动流程]30 - AP1 Android Kernel 启动流程 start_kernel 函数详细分析(一) 一.Android Kernel 启动流程分析 ...

  9. php7 mysql json 小程序_微信小程序php传递post请求发送json数据以获取小程序码

    困扰了两天的问题终于解决了! 用php传递post请求,发送json数据到微信小程序提供的接口,以此获得微信小程序码,下面是代码展示:<?php //需要传递的json数据 //能传递的参数,详 ...

最新文章

  1. AspNetPager分页控件
  2. 小米开源文件管理器MiCodeFileExplorer-源码研究(8)-文件排序工具类FileSortHelper
  3. [云炬ThinkPython阅读笔记]2.10 练习
  4. hadoop示例源码位置
  5. lamda 对比两个list_正式支持多线程!Redis 6.0与老版性能对比评测
  6. Python之数据分析(动画效果、animation模块、气泡动画)
  7. 计算机知识提炼,2017计算机考研:操作系统复习策略及重要知识点提炼
  8. DOS那一代的程序员现在都干嘛呢
  9. 齿轮刚度计算 matlab,数值积分求解齿轮刚度
  10. JVM垃圾回收机制,万字详解
  11. 中国研修网计算机培训心得,网络研修培训心得体会(精选7篇)
  12. 在英语课堂中培养学生音素觉知的初步探讨(Phonemic Awareness)
  13. 两台计算机之间的直连
  14. css进阶问题,CSS进阶指引
  15. Java基础03运算符
  16. 文献阅读笔记:Homogeneous ice nucleation in an ab initio machine-learning model of water
  17. Windows 7/Windows Server 2008 R2深入核心剖析
  18. Python学习笔记Day03
  19. 写一个家庭收支明细记账软件1.收支明细2.登记收入 3.登记支出 4.退出
  20. Nick: Words From The Core Team

热门文章

  1. npm: 权限阻止修复
  2. atitti.atiNav 手机导航组件的设计
  3. 关于年终奖励的扣税算法BUG
  4. Specify compute hosts with SSDs
  5. TCP/UDP编程中的问题汇总
  6. GeoServer+MySQL安装及配置过程
  7. (多图) 基于FPGA的FIR数字滤波器设计与仿真
  8. Node.js 框架
  9. 【语言处理与Python】1.4回到Python:决策与控制
  10. HDOJ2019 ( 数列有序! ) 【水题】