Is there a safe, portable way to determine (during compile time) the endianness of the platform that my program is being compiled on? I’m writing in C.
[EDIT]
Thanks for the answers, I decided to stick with the runtime solution!
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
This is for compile time checking
You could use information from the boost header file
endian.hpp, which covers many platforms.edit for runtime checking
Create an integer, and read its first byte (least significant byte). If that byte is 1, then the system is little endian, otherwise it’s big endian.
edit Thinking about it
Yes you could run into a potential issue in some platforms (can’t think of any) where
sizeof(char) == sizeof(short int). You could use fixed width multi-byte integral types available in<stdint.h>, or if your platform doesn’t have it, again you could adapt a boost header for your use:stdint.hpp