mysql客户服务端通信协议中的一个基本类型是长度编码的整型,即在位串中加入长度信息,在解码的时候必须根据这来进行解码。
当整数小于251(0xfb)时,使用一个字节来对整数进行编码;当整数大于251时,使用多个字节对整数进行编码,第一个字节为0xfc,0xfd,0xfe之一,0xfc表示该整数使用2个字节编码,后面2个字节未该整数的值;0xfd表示该整数使用3个字节编码,后面3个字节为该整数的值;0xfe表示该整数有8个字节,后面8个字节未该整数的值。
协议详细可以参考:
解码和编码的erlang实现如下:
lenenc_int_encode(int) when int>=0, int<16#fb ->
<>;
lenenc_int_encode(int) when int>=16#fb, int<16#ffff ->
<<16#fc:8, int:16>>;
lenenc_int_encode(int) when int>=16#ffff, int<16#ffffff ->
<<16#fd:8, int:24>>;
lenenc_int_encode(int) when int>=16#ffffff, int<16#ffffffffffffffff ->
<<16#fe:8, int:64>>.
lenenc_int_decode(<>) ->
int;
lenenc_int_decode(<<16#fc:8, int:16>>) ->
int;
lenenc_int_decode(<<16#fd:8, int:24>>) ->
int;
lenenc_int_decode(<<16#fe:8, int:64>>) ->
int.
阅读(3373) | 评论(0) | 转发(0) |