gpt4 book ai didi

python - C 函数到 Python(不同的结果)

转载 作者:行者123 更新时间:2023-11-28 16:22:21 25 4
gpt4 key购买 nike

我正在尝试将这段代码从 C 移植到 python。即使是相同的代码,输出也不同。

这是有效代码的 C 版本:

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++;
}
}

我目前在 Python 中拥有的是:

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()

我看到的问题是 whitenCoeff 在 C 代码段中始终保持 8 位,但在每次循环传递时它在 Python 中变得大于 8 位。

最佳答案

你还有一些问题。

  1. whitenCoeff <<= 1;if 之外阻止您的 C 代码,但它位于 if 中阻止您的 Python 代码。
  2. data[len - idx -1 ] ^= m翻译不正确,它从 C 代码向后工作。

此代码产生与您的 C 代码相同的输出:

def whiten(data, whitenCoeff):
for index in range(len(data)):
for i in range(8):
if (whitenCoeff & 0x80):
whitenCoeff ^= 0x11
data[index] ^= (1 << i)

whitenCoeff = (whitenCoeff << 1) & 0xff

return data

if __name__=="__main__":
print whiten([0x33,0x55,0x22,0x65,0x76], 0x64)

关于python - C 函数到 Python(不同的结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39337652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com