<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    二進制編碼/解碼支持

    Struct類提供了將Lua值與二進制Lua字符串中的C樣式結構相互轉換的基本功能。這是基于Roberto Ierusalimschy的Lua結構庫的,該庫位于http://www.inf.puc-rio.br/~roberto/struct/ 中 ,并作了一些小的修改,如下所示:

    • 增加了支持Int64/ UInt64被包裝/解壓縮,使用“E” /“E”。
    • 可以處理’long long’整數(i8 / I8);盡管它們已轉換為雙打。
    • 可以在結構中的任何位置插入/指定填充。(“ X”,例如,字符串在并集后面)。
    • 可以在pack和中都報告當前偏移量unpack(“ = ”)。
    • 當您只想使用“ ( ”和“ ) ”來計算大小或取消編組Pascal樣式的字符串時,可以屏蔽返回值。

    除第一個更改外,所有更改均基于Flemming Madsen在lua用戶郵件列表中的電子郵件。

    主要功能是Struct.pack,它將多個Lua值打包成類似struct的Lua二進制字符串;和Struct.unpack,從給定的類似結構的Lua二進制字符串中解壓縮多個Lua值。還有一些其他的輔助功能。

    Struct庫中的所有函數都稱為靜態成員函數,而不是對象方法,因此它們被稱為“ Struct.pack(…)”而不是“ object:pack(…)”。

    其中幾個Struct函數的第一個參數是格式字符串,它描述了結構的布局。格式字符串是一系列轉換元素,它們遵循當前字節序和當前對齊要求。最初,當前字節序為計算機的本機字節序,當前對齊要求為1(表示完全不對齊)。您可以使用格式字符串中的適當指令更改這些設置。

    格式字符串中受支持的元素如下:

    • `’(空白)被忽略。
    • `!n ‘標志,用于將當前對齊要求設置為’n’(必須為2的冪);缺少的“ n”表示機器的本機對齊方式。
    • “>”標志,將模式設置為大端(即網絡順序)。
    • “ <”標志可將模式設置為小端。
    • x填充零字節,沒有相應的Lua值。
    • b是簽名的字符。
    • “ B”是未簽名的字符。
    • “ h”是帶符號的短號(本機大小)。
    • ‘H’是無符號的short(本機大小)。
    • “ l”是帶符號的長號(本機大小)。
    • “ L”是無符號長整數(本機大小)。
    • T是一個size_t(本機大小)。
    • ‘i n ‘一個帶’n’個字節的有符號整數。缺少的“ n”表示整數的本機大小。
    • I *n* '類似于i n ‘,但未簽名。
    • e與一個Int64對象進行簽名的8字節整數(64位,很長)。
    • 到/來自UInt64對象的`E’無符號8字節整數(64位,很長)。
    • f是一個浮點數(本機大小)。
    • d(雙精度)(本機大小)。
    • s是一個以零結尾的字符串。
    • c n對應于單個Lua字符串的正好為n個字符的序列。缺少的“ n”表示1。打包時,給定的字符串必須至少包含“ n”個字符(多余的字符將被丟棄)。
    • c0類似于c n,不同的是n是以其他方式給出的:包裝時,n是給定字符串的長度。拆包時,“ n”是前一個拆包值的值(必須為數字)。在這種情況下,不會返回該先前值。
    • x n ‘填充到’n’個字節數,默認為1。
    • ‘X n ‘填充為’n’對齊,默認為MAXALIGN。
    • 停止分配項目)開始分配(打包時填充)。
    • “ =”返回當前位置/偏移量。

    Struct

    Struct.pack(format, value)

    返回包含根據格式字符串打包/編碼的值arg1,arg2等的字符串。

    Arguments

    format

    The format string

    value

    One or more Lua value(s) to encode, based on the given format.

    Returns

    The packed binary Lua string, plus any positions due to ‘=’ being used in format.

    Struct.unpack(format,struct,[begin])

    從給定的類似結構的二進制Lua字符串中解壓縮/解碼多個Lua值。返回值的數量取決于給定的格式,加上返回停止讀取的位置的附加值。

    Arguments

    format

    The format string

    struct

    The binary Lua string to unpack

    begin (optional)

    The position to begin reading from (default=1)

    Returns

    One or more values based on format, plus the position it stopped unpacking.

    Struct.size(format)

    返回給定格式字符串將使用/處理的二進制字符串的長度。

    Arguments

    format

    The format string

    Returns

    The size number

    Struct.values(format)

    返回給定格式字符串中包含的Lua值的數量。這將是對Struct.unpack()的調用返回的值的數量,不包括偏移位置的額外返回值。(即Struct.values()不計算該額外的返回值)。這也將是Struct.pack()期望的參數數量,不包括格式字符串參數。

    Arguments

    format

    The format string

    Returns

    The number of values

    Struct.tohex(bytestring, [lowercase], [separator])

    將傳入的二進制字符串轉換為十六進制字符串。

    Arguments

    bytestring

    A Lua string consisting of binary bytes

    lowercase (optional)

    True to use lower-case hex characters (default=false).

    separator (optional)

    A string separator to insert between hex bytes (default=nil).

    Returns

    The Lua hex-ascii string

    Struct.fromhex(hexbytes, [separator])

    將傳入的十六進制ASCII字符串轉換為二進制字符串。

    Arguments

    hexbytes

    A string consisting of hexadecimal bytes like “00 B1 A2” or “1a2b3c4d”

    separator (optional)

    A string separator between hex bytes/words (default none).

    Returns

    The Lua binary string。

    本文章首發在 網安wangan.com 網站上。

    上一篇 下一篇
    討論數量: 0
    只看當前版本


    暫無話題~
    亚洲 欧美 自拍 唯美 另类