Tôi đã cấu trúc sau đây và "getter" hàm trả về a
cast đến một số nguyên unsigned:Đúc các loại con trỏ trên kiến trúc khác nhau
struct s {
uint32_t a;
};
void get_a(struct s *st, unsigned *ret)
{
*ret = (unsigned)st->a;
}
Các mã sau đây được điều hành:
struct s st;
uint16_t x;
st.a = 1;
get_a(&st, (unsigned *)&x);
Và đối với x86_64, i686, armv7hl, ppc64le và các kiến trúc khác x == 1
, nhưng đối với ppc64 x == 0
. Tại sao điều này? Little- so với big-endian?
Đặt thành 0x12345678. Các máy nhỏ gọn sẽ trả về 0x5678, lớn nhất là 0x1234. Để duy trì hành vi tương tự trên tất cả các máy sử dụng các hàm htonl/htons/ntohl/ntohs. – nsilent22