gpt4 book ai didi

C# 字节处理

转载 作者:太空狗 更新时间:2023-10-30 00:52:14 30 4
gpt4 key购买 nike

我在尝试将一些 VB6 逻辑转换为 C# 时遇到了一些问题。在其中一个 VB6 函数中,它有以下语句:

w = Not CByte(w)

其中 w 是一个 long

在示例中,在 VB6 中计算此行后,我可以看到以下变化:
之前:w = 110
之后:w = 145

但是,在 C# 中,我重写了包含以下代码的方法:

w = ~(byte)w;

但是,当我运行相同的示例时,我得到了这些结果:
之前:w = 110
之后:w = -111

我也得到了同样的结果:

w = ~(Convert.ToByte(w));

我终于能够通过以下更改获得正确的结果:

w = ~(byte)w & 0xFF;

据我所知,C# 似乎正在将其转换为 sbyte,尽管并未指定这样做。我的问题是:我的逻辑有缺陷吗?这是获得 VB6 等效项的唯一方法吗?

最佳答案

w 是一个 long,但假设它是一个 int,这并不重要,只是它更容易解释。

w = ~(byte)w;

好的,所以 w 被转换为 byte .. 然后立即返回到 int,因为这就是算术运算的作用。

你可以通过从评论中采纳 Justin 的建议来解决它(它在正确的时刻进行转换:(byte)~w),或者用这个:

w ^= 0xFF;

虽然这不是严格意义上的同一件事,但如果 w 的起始值超出了 byte 的范围,那就不一样了。

关于C# 字节处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22615836/

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