【发布时间】:2016-03-24 10:21:53
【问题描述】:
根据 MSDN,Short 数据类型由两个字节组成:https://msdn.microsoft.com/en-us/library/47zceaw7.aspx
但是如果我定义一个Short变量,内容总是4字节:&HFFFFFFFF
Dim crc As Short = CShort(&HFFFFS) ' crc = &HFFFFFFFF
Dim crc As Short = &HFFFFS ' crc = &HFFFFFFFF
而且这个语句甚至给了我一个错误:
Dim crc As Short = CShort(&HFFFF) ' Error: Constant expression not representable in type 'Short'
这是怎么回事?为什么我的Short 不占用两个字节?
MWE 添加:
Public Function CRC16(ByVal dataFrame As Byte(), ByVal dataLength As Int16) As Int16
Dim index As Int16
Dim crc As Short = &HFFFFS
For iCount As Int16 = 0 To CShort(dataLength - 1)
index = (crc >> 8) Xor dataFrame(iCount)
crc = CShort(&HFFFF And ((crc << 8) Xor CRC_Table(index)))
Next
Return crc
End Function
【问题讨论】:
-
您的错误声明并不让我感到惊讶,因为 已签名
Short最多只能容纳 32,767 - 所以&HFFFF太大了。你能展示一段可执行代码来说明你的问题吗?你怎么知道此时的内容是4个字节? -
@Farhan 谢谢,这是我的推理错误,我的意图是将所有位设置为 1 并且不传递 &HFFFF 的值我该怎么做?
-
@Macro VS 中的“鼠标悬停变量”功能和监视窗口向我显示了值。
-
它只是一个调试器工件,当您在上下文菜单中勾选“十六进制显示”时发生。是的,它当然不会赢得任何奖品,但它并没有太大的错误,当您将 Short 分配给 Integer 时,它仍然是 -1。
-
如果我将
&HFFFFS分配给Short,我会得到-1的返回值,正如 Hans 上面所说的那样,这将支持他的评论。