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.
阅读(3456) | 评论(0) | 转发(0) |