I'm trying to read some binary formatted data. In C, I would define an
appropriately padded struct and cast away. Is is possible to do something
similar in Julia, though for only one value at a time? Philosophically, I'd
like to approximate the following, for some simple bittypes T (Int32,
Float32, etc.)
T read<T>(char* data, size_t offset) { return *(T*)(data + offset); }
The transliteration of this brain-dead approach results in the following,
which seems to allocate a boxed Pointer object on every invocation. The
pointer function comes with ample warnings about how it shouldn't be used,
and I imagine that it's not polite to the garbage collector.
prim_read{T}(::Type{T}, data::AbstractArray{Uint8, 1}, byte_number) =
unsafe_load(convert(Ptr{T}, pointer(data, byte_number)))
I can reinterpret the whole array, but this will involve a division of the
offset to calculate the new offset relative to the reinterpreted array, and
it allocates an array object.
Is there a better way to simply read the machine word at a particular
offset in a byte array? I would think it should inline to a single assembly
instruction if done right.