In C/C++, we can write a struct to file like this:
#include <stdio.h>
struct mystruct
{
int i;
char cha;
};
int main(void)
{
FILE *stream;
struct mystruct s;
stream = fopen("TEST.$$$", "wb"))
s.i = 0;
s.cha = 'A';
fwrite(&s, sizeof(s), 1, stream);
fclose(stream);
return 0;
}
But how to wirte a struct to file in go or python ? I want the data in struct are continuous.
In Python you can use ctypes
module which allows you to generate structures with similar layout as C does, and convert them to byte arrays:
import ctypes
class MyStruct(ctypes.Structure):
_fields_ = [('i', ctypes.c_int),
('cha', ctypes.c_char)]
s = MyStruct()
s.i = 0
s.cha = 'A'
f.write(bytearray(s))
There is a simplest approach in Python with using struct.pack
and manually provide a layout as first argument ('ic'
means int
followed by a char):
import struct
f.write(struct.pack('ic', 0, 'A'))
Go can encode structs via encoding/binary
type myStruct struct {
i int
cha byte
}
s := myStruct{i: 0, cha:'A'}
binary.Write(f, binary.LittleEndian, &s)
NOTE: You will be subject of differing structure alignment, padding and endianness, so if you want to build truly interoperable program, use special formats such as Google Protobuf