gpt4 book ai didi

c# - 奇怪的行为 C# 与 Python 字节操作

转载 作者:行者123 更新时间:2023-11-28 19:48:18 26 4
gpt4 key购买 nike

为什么 C#:

byte[] vals = new byte[] {223, 30, 244, 156};
int result = 0;
for(int i = 0; i <= 3; ++i) {
result <<= 8;
result |= vals[i];
}
print("RESULT: " + result);

产量:

RESULT: -551619428

在 Python 中:

vals = array.array('B', [223, 30, 244, 156])
result = 0
for val in vals:
result <<= 8
result |= val
print 'RESULT: %s' % result

产量:

RESULT: 3743347868

虽然...抛出数组值:

[37, 120, 244, 167]

在两种语言中产生:

RESULT: 628683943

编辑:我没有在最初的问题中包含这个,但我的实际目标是让 Python 在这种情况下表现得像 C#。根据下面的答案,我发现我需要在 Python 端强制进行 int 溢出。

这似乎有效:

import numpy
result = numpy.int32(result)

最佳答案

在 C# 中,int 是一个带符号的 32 位整数。 int 的最大值为 2147483647 - 低于 3743347868。您执行的操作会导致溢出,从而产生负值。

如果将 result 的类型更改为 unsigned int (uint) 或 64 位整数 ():

byte[] vals = new byte[] {223, 30, 244, 156};
uint result = 0;
for(int i = 0; i <= 3; ++i) {
result <<= 8;
result |= vals[i];
}

关于c# - 奇怪的行为 C# 与 Python 字节操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34643903/

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