News for hackers. Stuff that matters.
Re:The Byte Order Fiasco by foldr on Saturday May 08, 2021 @09:33AM (#27086977)
What are the advantages of this over a simple function with the following signature?

    uint32_t read_big_uint32(char *bytes);
Having a big_uint32_t type seems wrong to me conceptually. You should either deal with sequences of bytes with a defined endianness or with native 32-bit integers of indeterminate endianness (assuming that your code is intended to be endian neutral). Having some kind of halfway house just confuses things.
Re:The Byte Order Fiasco by nly on Saturday May 08, 2021 @09:51AM (#27087118)
The library provides those functions too, but I don't see how having an arithmetic type with well defined size, endiannness and alignment is a bad thing.

If you're defining a struct to mirror a data structure from a device, protocol or file format then the language / type system should let you define the properties of the fields, not necessarily force you to introduce a parsing/decoding stage which could be more easily bypassed.

Re:The Byte Order Fiasco by lanstin on Saturday May 08, 2021 @02:06PM (#27089413)
It is no longer arithmetic if there is an endianness. Some things are numbers and some things are sequences of bytes. Arithmetic only works on the former.
Re:The Byte Order Fiasco by themulticaster on Saturday May 08, 2021 @10:07AM (#27087261)
I agree, but a little nitpick: A sequence of bytes does not have a defined endianness. Only groups of more than one bytes (i.e. half words, words, double words or whatever you want to call them) have an endianness.

In practice, most projects (e.g. the Linux kernel or the socket interface) differentiate between host (indeterminate) byte order and a specific byte order (e.g. network byte order/big endian).

Re:The Byte Order Fiasco by mfost on Saturday May 08, 2021 @10:32AM (#27087446)
I'd say, putting multiple of those types into a struct that then perfectly describes the memory layout of each byte of data in memory/network packet in a reliable and user friendly way to manipulate for the coder.
Re:The Byte Order Fiasco by foldr on Saturday May 08, 2021 @01:00PM (#27088856)
I see. That does seem helpful once you consider how these types compose, rather than thinking about a one-off conversion. However, I think it would be cleaner to have a library that auto-generated a parser for a given struct paired with an endianness specification, rather than baking the endianness into the types. (Probably this could be achieved by template metaprogramming too.)