gpt4 book ai didi

c# - 将按位运算从 C# 移植到 C

转载 作者:太空狗 更新时间:2023-10-29 15:56:39 25 4
gpt4 key购买 nike

我需要一些帮助将此 C# 代码移植到 C。我在 C# 中工作得很好,但我在 C 中得到了错误的返回。我是否应该将位移分解为单独的行?我以为我的数据类型有问题,但我认为我有正确的数据类型。这是返回 0x03046ABE 的工作代码

  UInt32 goHigh(UInt32 x) { return (UInt32)(x & 0xFFFF0000); }          
UInt32 goLow(UInt32 x) { return (UInt32)(x & 0xFFFF); }

UInt32 magic(UInt32 pass){
UInt32 key = pass;
UInt16 num = 0x0563;
key = (goLow(key) << 16) | (UInt16)(((num >> 3) | (num << 13)) ^ (goHigh(key) >> 16));
return key; //returns 0x03046ABE

}

magic(0x01020304);

这是我试图开始工作的不正确的 C 代码

  unsigned long  goHigh(unsigned long  x) { 
return (unsigned long )(x & 0xFFFF0000); }
unsigned long goLow(unsigned long x) {
return (unsigned long )(x & 0xFFFF); }

unsigned long magic(unsigned long pass){
unsigned long key = pass;
unsigned int num = 0x0563;
key = (goLow(key) << 16) | (unsigned int)(((num >> 3) | (num << 13)) ^ (goHigh(key) >> 16));
return key;
}

magic(0x01020304); //returns 0xb8c6a8e

最佳答案

最有可能的问题在这里:

key = (goLow(key) << 16) | (unsigned int)(((num >> 3) | (num << 13)) ^ (goHigh(key) >> 16));
^^^^^^^^^^^^

您期望的是 16 位。它在不同的机器上可能更大。与 unsigned long 相同,如您所料,它可能是 64 位而不是 32 位。

可以肯定的是,使用 uint32_t & uint16_t .你必须 #include <stdint.h>能够使用它们。

关于c# - 将按位运算从 C# 移植到 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51532072/

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