我一直在C#中编写一个相当低级别的应用程序,它使用大量的字节短语和位操作。我注意到的一件事是C#不喜欢进行位操作,并且使用除int之外的其他任何布尔运算符。这导致了我的代码遍布了数百个代码。错误,如“无法隐式转换类型‘诠释’到‘USHORT’。一个显式转换存在(是否缺少强制转换?)”在C中讨厌的强制转换#
byte b1 = 0x22;
byte b2 = 0x33;
ushort s1 = b1 << 8; // <-- Error Here
ushort s2 = s1 | b2; // <-- And Here
这迫使我使用蒙上无处不在。
byte b1 = 0x22;
byte b2 = 0x33;
ushort s1 = (ushort)(b1 << 8 | b2);
这应该至多是一个警告。即使b1和b2类型的ushort仍然是错误的。即使添加等基本算术也会导致相同的错误。
ushort s1 = 0x22;
ushort s2 = s1 + 0x11; // <-- Oh Come On.
ushort s3 = 8;
ushort s4 = (s1 << s3 | s2); // <-- Still an Error.
反正是有解决这个还是我只是对自己辞职的事实,强制转换只是一个C#生活的一部分,当涉及到使用非整数其它任何东西,或只是使用C++在那里,这不是一个问题。
或者你可以使用'int's。 – Gabe
无论出于何种原因,字节数据类型都有这些奇怪的限制,其他人不这样做。转换标记是明确的,所以你必须投它们。 – Joe
关于'ushort s2 = s1 + 0x11;',请参阅http://stackoverflow.com/questions/4343624/integer-summing-blues-short-short-problem/4347752#4347752 –