나는이 코드 스 니펫을 C의 파이썬으로 이식하려고하고있다. 코드가 같더라도 결과는 다르다. whitenCoeff 항상 8 비트 남아 내가 보는 문제가파이썬에 C 함수
def whiten(data, len, whitenCoeff):
idx = len
while(idx > 0):
m = 0x01
for i in range(0,8):
if(whitenCoeff & 0x80):
whitenCoeff ^= 0x11
data[len - idx -1 ] ^= m
whitenCoeff <<= 1
m <<= 0x01
idx = idx - 1
pac = [0x33,0x55,0x22,0x65,0x76]
len = 5
chan = 0x64
def main():
whiten(pac,5,chan)
print pac
if __name__=="__main__":
main()
:
int main(void)
{
uint8_t pac[] = {0x033,0x55,0x22,0x65,0x76};
uint8_t len = 5;
uint8_t chan = 0x64;
btLeWhiten(pac, len, chan);
for(int i = 0;i<=len;i++)
{
printf("Whiten %02d \r\n",pac[i]);
}
while(1)
{
}
return 0;
}
void btLeWhiten(uint8_t* data, uint8_t len, uint8_t whitenCoeff)
{
uint8_t m;
while(len--){
for(m = 1; m; m <<= 1){
if(whitenCoeff & 0x80){
whitenCoeff ^= 0x11;
(*data) ^= m;
}
whitenCoeff <<= 1;
}
data++;
}
}
내가 현재 파이썬에있는 것은 :
이
작동 코드의 C 버전입니다 C 스 니펫을 사용하지만 각 루프 패스에서 파이썬에서 8 비트보다 커집니다.
필자는 파이썬 코드가 항상 더 큰 숫자 형 ('int')을 사용한다는 것을 합리적으로 확신하므로 파이썬 코드는 다른 크기의 타입 (다른 결과를 설명 할 것입니다)에서 작동합니다. – UnholySheep