gpt4 book ai didi

c# - 将#define 转换为 CS 常量

转载 作者:太空宇宙 更新时间:2023-11-04 08:53:15 26 4
gpt4 key购买 nike

我正在将一些用 C 编写的代码转换为 C#,因为我需要为我的嵌入式 C 项目编写一个支持应用程序。我正在进行一些繁重的 bool 计算a,因为它正在计算要进入硬件寄存器的值。

我需要在 C 项目和 C# 项目中使用相同的定义,有很多定义,所以我需要用最少的努力进行转换。

两个例子都简化了很多

为什么我不能这样做?

#define MCLK (198656000)
#define MCLK_TICK_NS (1000000000 / MCLK);

转换为

private const uint MCLK = 198656000;
private const uint MCLK_TICK_NS = (1000000000 / MCLK);

正确的做法是什么?

为什么我不能这样做?

#define test (unsigned long)((unsigned long)0x1 << (unsigned long)31)

转换为

private const uint test = (uint)((uint)0x1 << (uint)31);

正确的做法是什么?

在第二个例子中我得到了错误

Error 1 Constant value '-2147483648' cannot be converted to a 'uint' (use 'unchecked' syntax to override)

use 'unchecked' syntax to override 到底是什么鬼?

为什么我要关闭检查来做一些完全合法的事情?

最佳答案

第一个代码为我编译没有错误。

第二个例子我有另一个错误(但我使用的是单声道):

error CS0019: Operator <<' cannot be applied to operands of typeuint' and `uint'

因此,删除强制转换为 uint来自 31

private const uint test = (uint)((uint)0x1 << 31);
// no cast here ^^

解决问题。另外,我看不出第一次类型转换有什么理由,你可以简单地写

private const uint test = (uint)0x1 << 31;

关于c# - 将#define 转换为 CS 常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18766562/

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