나는 엔디 언과 비트 쉬프트가 혼동 스럽다고 생각합니다. 제발 도와주세요.8 비트 정수를 32 비트로 변환하기
32 비트 정수로 변환하려는 4 개의 8 비트 정수가 있습니다. 이것은 내가하고있는 것입니다 :
uint h;
t_uint8 ff[4] = {1,2,3,4};
if (BIG_ENDIAN) {
h = ((int)ff[0] << 24) | ((int)ff[1] << 16) | ((int)ff[2] << 8) | ((int)ff[3]);
}
else {
h = ((int)ff[0] >> 24) | ((int)ff[1] >> 16) | ((int)ff[2] >> 8) | ((int)ff[3]);
}
그러나 이것은 잘못된 결과를 만들어내는 것 같습니다. 약간의 실험을 통해 나는 그것이 다른 방향이어야한다는 것을 깨달았습니다. 빅 엔디안의 경우 비트를 오른쪽으로, 그렇지 않으면 왼쪽으로 이동해야합니다. 그러나 나는 왜 그런지 이해하지 못한다.
이렇게 이해합니다. 빅 엔디안은 가장 중요한 바이트를 먼저 의미합니다 (첫 번째는 가장 왼쪽에 있음을 의미). 따라서 8 비트 int를 32 비트 int로 변환하면 기존 8 비트에 24 개의 0이 추가됩니다. 그래서 그것을 1 바이트 째로 만들기 위해서는 비트 24를 왼쪽으로 옮겨야합니다.
내가 잘못했음을 지적하십시오.
글쎄,'ff [0] >> 24'는 무엇입니까? 그것을 손으로하고 결과를보십시오. 맞습니까? – hyde
아마도 노동 조합과 함께하려고합니까? – AdamF
"잘못된 결과"가 나옵니다. 어떤 결과를 얻었으며 예상했던 것과 다른 결과를 얻었습니까? –