7 ms·
Unless you are planning on running your game on a mainframe, just don’t bother with endianness for the networking. Big endian is dead for game developers. Cop
by Negitivefrags 5y ago
Unless you are planning on running your game on a mainframe, just don’t bother with endianness for the networking.
Big endian is dead for game developers.
Copy entire arrays of structs onto the wire without fear!
(Just #pragma pack them first)
- musicale 5y ago> game on a mainframe Maybe your program isn't a game. Maybe you have to deal a server that uses Power, or an embedded system that uses PowerPC (or ARM or MIPS in big-endian mode). Maybe you're running on an older architecture (SPARC, PowerPC, 68K.) Maybe you have to deal with a pre-defined data format (e.g. TCP/IP packet headers) that uses big-endian byte ordering for some of its components.
- Aeolun 5y agoThat’s theoretically possible. But I’d be very interested in why. Especially if you are doing anything involving networking.
- Animats 5y agoBecause it makes it clear what's going on. Most of those functions just generate a move, but it's the correct move. I had to read through excessively-clever C++ code that did the same thing to figure out what conversions were happening, then re-express it in Rust. I'm re-implementing a legacy mess that people are afraid to work on. As it happens, in this message system, some items, mainly packet sequence numbers, are big-endian, because they were following what IP and UDP do, and everything else is little endian. I know how to do this with shifts and masks, and I've done things like that when programming in assembly. That was a long time ago. There's been progress in how to write programs.
- Negitivefrags 5y agoObviously if you are interacting with an old protocol that uses network byte order for some things, you will need to use these functions. But what's the argument for using them in new game code? The code will not be running anywhere that has big-endianness. No current platform a game could run on uses it, and I can't imagine a scenario where a new platform would come into existance and use it either. If you insist on using network-byte order anyway, then you have to do an extra bswap op for each bit of data you send. Sure, the cost of that is super minor and probably not worth worrying about. But the bigger cost is that you can't just send whole structures at a time. You have to individually serialise each thing. Now you have to have a whole serialisation concept. You have to have some way of enumerating all the fields. You have to walk all the structures. What a pain. If you want to send a thing over the network, just send it.
- silon42 5y agoI disagree... but what I would do is use little endian, so the legacy machines need to byte swap.