1

我对 C# 编码有点陌生,我最近处理了一个问题,我想寻求你的帮助。我从下面的链接中获得了这段代码。

http://pastebin.com/5jQe5tQs

我的问题是在终点线:

uint num = ((string_0[0] | (string_0[1] << 8)) |
            (string_0[2] << 0x10)) | (string_0[3] << 0x18);

我在哪里得到这个错误:

无法将类型“int”隐式转换为“uint”。存在显式转换(您是否缺少演员表?)

根据我所知道和阅读的内容,我看到问题来自为 int 分配的值,对于 int 值来说太大了。但是根据我的一点经验,我不知道来自哪个变量的值格式不正确。更有建议的专家可以帮助我修复代码吗?

4

1 回答 1

3

表达式的结果

((string_0[0] | (string_0[1] << 8)) | (string_0[2] << 0x10)) | (string_0[3] << 0x18)

是一个int。您正在将其放入uint. 只需制作num一个int, 或将表达式转换为uint.

发生的情况是,当您使用运算符取消对字符串的一部分的引用时[],您会获取一个char. 因为 shift 运算符 forchar 不存在,所以值将隐式升级为int(升级没问题,因为不存在丢失准确性的风险)。所以这部分(和其他部分一样):

(string_0[1] << 8)

返回一个int.

于 2013-07-15T07:44:31.430 回答