Skip to content

OpenSystemsLab/struct.nim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

struct.nim

Python-like 'struct' for Nim

This library is still under development, use it as yourown risk!

Format String

Byte Order

CharacterByte order
@native
=native
<little-endian
>big-endian
!network (= big-endian)

Notes:

  • Unlike Python -byte-order can specified once as first character, with this implementation, you can change byte-order anywhere and anytime you want

Format Characters:

integerintegerintegerinteger
FormatC TypePython TypeNim TypeSize (bytes)
xpad byteno value
bcharstring of length 1char1
?_Boolboolbool1
hshortintegerint162
Husigned shortintegeruint162
iintintegerint324
Iunsigned intintegeruint324
qlong longintegerint648
Qunsigned long longintegeruint648
ffloatfloatfloat324
ddoublefloatfloat648
schar[]stringstring

Notes:

  • Format character can has a number prefix, you can use "3?" instead of "???" for pack/unpack three bool value
  • For string , number prefix is the length of value

Usage

# >>> from struct import *
import struct

# >>> pack('hhi', 1, 2, 3)
var output =  pack("hhi", 1, 2, 3)

# alternative way to pack
# output = pack("hhi", newStructInt(1), newStructInt(1), newStructInt(3))

# >>> unpack('hhi', '\x00\x01\x00\x02\x00\x00\x00\x03')
var result = unpack("hhi", output);
echo result[0].getShort
echo result[1].getShort
echo result[2].getInt