Coder Social home page Coder Social logo

struct.nim's Introduction

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

struct.nim's People

Contributors

abeaumont avatar aguspiza avatar ba0f3 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

struct.nim's Issues

Unexpected Output

Sorry, it's me again.

nim> import struct
nim> var a = unpack(">3I", "Hello World ")
nim> a
@[1214606444, 1864390511, 1919706144] == type seq[StructNode]
nim> pack(">3I", a)
Horld  == type string

Also it would be a useful feature to pass a seq[int32] to pack.

Unexpected Output

>>> from struct import unpack
>>> unpack(">3I", b"Hello World ")
(1214606444, 1864390511, 1919706144)
nim> from struct import unpack
nim> unpack(">3I", "Hello World ")
@[(kind: StructInt, num: 1214606444), (kind: StructInt, num: 1214606444), (kind: StructInt, num: 1214606444)] == type seq[StructNode]

packing type 'byte' throws exception

Hi,

This code:

import struct
var packed_byte = pack("b", 5)

throws the following exception:

Traceback (most recent call last)
struct.nim(490)          test
struct.nim(438)          pack
struct.nim(326)          pack_char
system.nim(3535)         failedAssertImpl
system.nim(3527)         raiseAssert
system.nim(2637)         sysFatal
Error: unhandled exception: vars[ctx.offset].kind == StructChar  [AssertionError]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.