我是C#编码的新手,我最近遇到了一个问题,我想请求你的帮助。 我从下面的链接中获得了这段代码。
我的问题出在终点:
uint num = ((string_0[0] | (string_0[1] << 8)) |
(string_0[2] << 0x10)) | (string_0[3] << 0x18);
我收到此错误:
无法将类型'int'隐式转换为'uint'。显式转换 存在(你是否错过演员表?)
根据我的知识和阅读,我发现问题来自一个int的值,对于int值来说太大了。 但是根据我的经验,我不知道哪个变量的值不是正确的格式。 更值得建议的专家可以帮我修改代码吗?
答案 0 :(得分:3)
表达式的结果
((string_0[0] | (string_0[1] << 8)) | (string_0[2] << 0x10)) | (string_0[3] << 0x18)
是int
。你将它放入uint
。只需将num
设为int
,或将表达式转换为uint
。
当您使用[]
运算符对字符串的一部分进行反洗时,您会获取char
。由于char
do not exist的移位运算符,该值将隐式升级为int
(升级没有问题,因为没有丢失准确性的风险)。所以这部分(和其他部分一样):
(string_0[1] << 8)
返回int
。