2012-06-05 2 views
0

리틀 엔디안에서 빅 엔디안으로 값을 변환하는 방법을 찾고 있습니다. 하나의 정수가 아닌 비트 배열로 표현 된 값을가집니다. 엔디안 스왑 기능을 구현하려면 어떻게해야합니까?endianness-를 비트 배열로 변환하는 방법

+0

'std :: reverse' 작업을하지 않거나 거대한 것을 놓치고 싶습니까? – chris

+1

@chris : Endian-ness는 가장 중요한 * byte *가 무엇인지 결정합니다. – tskuzzy

+0

@chris : 전체 시퀀스를 뒤집을 것이라고 생각합니다. 엔디안 만 ... 바이트를 바꿔야하나요? – Puppy

답변

2

저는 C++ 사람이 아니므로이 일을 일반적으로 할 것입니다.

빅 엔디안에서 리틀 엔디안으로 변환하는 것은 바이트를 반대로하는 것입니다. 즉, 8 비트 세그먼트입니다.

그래서 당신이 (여기 pseudocoded) N 바이트의 배열이있는 경우 :

bool bits[8*N]; 

을 당신은 같은 것을 할 것입니다 : 코멘트에

for(int i = 0; i < N/2; i++) { 
    for(int j = 0; j < 8; j++) { 
     bool tmp = bits[8*i+j]; 
     bits[8*i+j] = bits[8*(N-i-1)+j]; 
     bits[8*(N-i-1)+j] = tmp; 
    } 
} 

을, 당신이 언급 한 그 "비트" 나중에 올바른 비트로 평가되는 표현식에 대한 포인터입니다. 이 방식으로 포인터의 순서를 변경하면 나중에 비트를 가져올 때 엔디안 네스가 올바르게 변경됩니다.

1

이 우수한 article을 확인할 수 있습니다. 여기서 다른 endianness의 데이터를 교환하고 처리하는 방법에 대해 설명합니다. 어쩌면 기능 집합 endian.h이 도움이 될 수도 있습니다.

관련 문제