【问题标题】:Why does my Short containing 4 bytes in VB.net为什么我的 Short 在 VB.net 中包含 4 个字节
【发布时间】: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 - 所以 &amp;HFFFF 太大了。你能展示一段可执行代码来说明你的问题吗?你怎么知道此时的内容是4个字节?
  • @Farhan 谢谢,这是我的推理错误,我的意图是将所有位设置为 1 并且不传递 &HFFFF 的值我该怎么做?
  • @Macro VS 中的“鼠标悬停变量”功能和监视窗口向我显示了值。
  • 它只是一个调试器工件,当您在上下文菜单中勾选“十六进制显示”时发生。是的,它当然不会赢得任何奖品,但它并没有太大的错误,当您将 Short 分配给 Integer 时,它仍然是 -1。
  • 如果我将 &amp;HFFFFS 分配给 Short,我会得到 -1 的返回值,正如 Hans 上面所说的那样,这将支持他的评论。

标签: .net vb.net short


【解决方案1】:

这是因为Short有符号的,所以最高有效位是为符号保留的。因此,您可以在 signed 短中存储的最高值是 &amp;H7FFFInt16.MaxValue

如果你想使用所有 16 位,那么你需要使用 Unsigned Short (UInt16)

所以这失败了:

Dim crc As Short = CShort(&HFFFF) 

但这有效:

Dim crc As UShort = CUShort(&HFFFF) 

【讨论】:

    猜你喜欢
    • 2010-10-24
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 2011-03-31
    • 2014-03-10
    相关资源
    最近更新 更多