如何在VB.NET中将十六进制偏移量转换为两字节指针?

如何在VB.NET中将十六进制偏移量转换为两字节指针?,vb.net,pointers,hex,z80,Vb.net,Pointers,Hex,Z80,我正在开发一个特殊的十六进制编辑器,其中包括一个Z80双字节指针转换器 转换背后的数学原理如下: 取要指向的偏移量 取偏移量的最后四位,并剪掉其余的 如果偏移量超出范围&H4000-&H7FFF,则必须按如下方式转换:(偏移量%&H4000)+&H4000。换言之: 如果偏移量从&H0000到&H3FFF,则将&H4000添加到偏移量 如果偏移量是从&H4000到&H7FFF,请不要对偏移量进行任何操作 如果偏移量是从&H8000到&HBFFF,则从偏移量中减去&H4000 如果偏移量是从&H

我正在开发一个特殊的十六进制编辑器,其中包括一个Z80双字节指针转换器

转换背后的数学原理如下:

  • 取要指向的偏移量
  • 取偏移量的最后四位,并剪掉其余的
  • 如果偏移量超出范围
    &H4000
    -
    &H7FFF
    ,则必须按如下方式转换:
    (偏移量%&H4000)+&H4000
    。换言之:
    • 如果偏移量从
      &H0000
      &H3FFF
      ,则将
      &H4000
      添加到偏移量
    • 如果偏移量是从
      &H4000
      &H7FFF
      ,请不要对偏移量进行任何操作
    • 如果偏移量是从
      &H8000
      &HBFFF
      ,则从偏移量中减去
      &H4000
    • 如果偏移量是从
      &HC000
      &HFFFF
      ,则从偏移量中减去
      &H8000
  • 我的问题是我不知道如何将5或6位数的十六进制偏移量转换成两位数的偏移量。如何在开头(第二步)去掉多余的字节?

    使用Visual Basic中拼写的“余数”运算符:

    offset Mod &H10000
    

    使用“Mod”运算符的答案是正确的

    但是,学究式地说,这是一个“模”运算符,而不是“余数”运算符。负数是有区别的。(我很感激我们这里不是在谈论负数。)


    参见

    实际上,链接的MSDN对Mod的定义令人惊讶地说,它是余数,但没有讨论负数。提出这个问题很有道理——尽管你的答案可能更适合作为评论。