나는 리틀 엔디안의 "친절한"ISA를 가지고있다. 기본 메모리 유닛컴파일러와 엔디안
00000000: BEFC03FF 00008000
가 "낮은"BEFC03FF
정수이고 "하이"정수 00008000
것을 나타내는 정수 아닌 byte.For 예이다. 일부 비트로 표시된 값을 읽어야합니다. 예를 들어 비트 31에서 47까지입니다. VS10 (C++)에서 uint64_t var = 0x00008000BEFC03FF 을 생성 한 후 var & mask
의 값을 확인한 후이를 수행합니다. 그런 식으로하는 것이 합법적입니까? 저는 uint64_t 비트 배열에 대한 가정을하고 있습니다 - 합법적입니까? 컴파일러와 모든 OS (hw에 의존하지 않음)에서 uint64_t의 비트 배열을 이렇게 가정 할 수 있습니까?
는 당신이 실제로 어떻게해야합니까 바이트 순서를 교환 할 수있는 소프트웨어에 달려있다? 특정 메모리 주소를 읽거나 쓰거나 다른 형식의 I/O를 수행해야합니까? 그렇지 않다면 엔디안에 대해 걱정할 필요가 없습니다. –
@OliCharlesworth - 내가 원하는 것을 작성하지 않았습니까? I/O가 아닌 경우 - 엔디안에 대해 걱정할 필요가없는 이유는 무엇입니까? 개념을 이해하고 컴파일러에 의존하는지 알고 싶습니다. – Yakov
결과 'uint64_t var = 0x00008000BEFC03FF; var & mask'는 엔디안에 의존하지 않습니다. 엔디 언은 기본 표현에 관심이있는 경우에만 중요합니다 (이것이 IO에 중요한 이유입니다). –