【问题标题】:Shift ulong from c++ to c# [closed]将 ulong 从 c++ 转移到 c# [关闭]
【发布时间】:2018-05-08 10:22:46
【问题描述】:

我正在将应用程序从 C 转换为 C#,现在我在使用 ulong 值转换班次时遇到错误。

c++原代码为:

unsigned long long dat = (d >> dat_shift) & (0xffffffffffffffff >> (64 - data_bits_first_frame));

在 C# 中,我认为应该是这样的:

long d = 1158552107947655168;
int dat_shift  = 8;
int data_bits_first_frame = 0;
ulong dat = (d >> dat_shift) & (0xffffffffffffffff >> (64 - data_bits_first_frame));

在运行时我收到错误CS0019 Operator '&' cannot be applied to operands of type 'ulong' and 'ulong'

原因是0xffffffffffffffff。您能帮我理解并解决问题吗?

非常感谢。

【问题讨论】:

  • 请显示所有变量的类型,以便我们重现问题。 (我们可以猜测,但如果我们可以复制和粘贴会更容易。)(这是一个令人惊讶的错误消息,考虑到两个 ulong 部分。)
  • 我得到一个不同的错误:ideone.com/Ol7WO3...

标签: c# c++ bit-shift ulong


【解决方案1】:

错误是:

错误 CS0019:运算符“&”不能应用于类型的操作数 'long' 和 'ulong'。

不是ulongulong

要使其工作,d 应该是 ulong 类型:

ulong d = 1158552107947655168;

【讨论】:

  • 您好,非常感谢您,但它不起作用,因为在代码的另一部分我有: int sid_shift = 250; int sid_bits = 4; uint sensorId = (uint)((d >> sid_shift) & (0xff >> (8 - sid_bits)));如果我将 d 从 long 更改为 ulong,我会到达:错误 CS0019:运算符“&”不能应用于“ulong”和“int”类型的操作数。
  • 不客气
  • @Xabarass,如果你希望你的结果为uint 比:uint sensorId = (uint)(((uint)d >> sid_shift) & (0xff >> (8 - sid_bits))); - 将d 转换为uint(但可能是数据丢失)
猜你喜欢
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
相关资源
最近更新 更多