가변 길이 비트 문자열에서 일부 비트 연산을 수행하고 있습니다.C : 가변 길이 비트 문자열에 대한 비트 연산
내가 주어진 *res
변수에 의해 전달 된 비트 스트링에서 작동해야하는 기능 setBits(char *res, int x, int y)
을 정의 x
및 y
(그냥 X 당 8 비트를 사용하여 블룸 필터 같은 것을 구현하기 위해 노력하고있어 언급) :
void setBits(char *res, int x, int y)
{
*res |= x << (y * 8)
}
예 : (little- 또는 빅 엔디안은,하지만 지금은 중요하지 않다 여부 반대 따라) 다음 XY-벡터 {0,0} ; {0,1} ; {1,2} ; {2,3}
주어, 나는이 같은 비트 문자열 예상 :
0000 0010 0000 0001 0000 0000 0000 0000
그래서 가장 낮은 (8) 비트는 {0,0}
, 두 번째 8 비트는 {0,1}
, 다음 8 비트는 {1,2}
및 마지막 비트는 {2,3}
입니다.
불행히도 나는 그 이유를 알지 못합니다. setBits
은 항상 마지막 결과 (이 경우 즉 {2,3}
의 비트 문자열) 만 반환합니다. 코드를 디버깅하여 *res
이 항상 0이라는 것을 깨달았습니다.하지만 그 이유는 무엇입니까? 내가 도대체 뭘 잘못하고있는 겁니까? char*
이 작동하지 않거나 완전히 어리석은 뭔가를 놓친 것입니까?
오! 정말'char *'입니까? 그럼 내가 뭘 할 수 있니? 비트 문자열의 길이는 가변적이어야한다. 'char []'를 대신 전달 하시겠습니까? – navige
네, 바이트 배열이고' – noMAD
@navititious '를 참조하십시오. char []'을 시도해 보시지 않으시겠습니까? 죄송합니다. 더 구체적인 조언을하기 위해 애 쓰고 있습니다. Bloom 필터가 무엇인지 알지 못하고 무엇을 성취하려고하는지 잘 모르겠다. – simonc