Delphi中数字前面的"$"是什么意思?

12

我正在尝试将Delphi代码转换为vb.net,但是对于这行代码不确定:

stream.Seek($42, soFromBeginning);

我熟悉在文件流上使用 seek(在vb.net中),但是我不确定 $42 是什么意思。

我猜它对应一个位置,但是它如何转换为vb.net呢?

3个回答

15

$是十六进制常量的前缀。在VB.NET中,使用&H来表示,所以你需要写成&H42。


1
Delphi的整数字面量允许使用'x'、'0x'和'$'来表示十六进制。因此,'$'不是唯一的前缀。 - az01
@az01 我可以相信0x(尽管我不知道它,也还没有尝试过),但我绝对确定ax和xa都不是整数字面量。 - user743382
2
@az01 现在我已经尝试过了,我发现对于 Delphi 来说,0x 也是无意义的。 - user743382
2
@Az01可能在考虑将字符串转换为整数。Val函数接受$xX0x0X作为十六进制前缀,并且ValStrToIntRead使用的函数。但是,在解析Delphi语言时,编译器只接受$作为十六进制数字的前缀,而不是使用Val函数。 - Rob Kennedy
@RobKennedy,感谢您的回复,很高兴看到@az01的说法实际上是有一些真相的,尽管它与这个问题无关。或许有趣的是,我无法在帮助文档中找到ValStrToIntRead所接受的精确语法,即使在Delphi 7的帮助文档中也是如此。 - user743382
是的,你说得对,我的初始评论完全与主题无关,但现在删除评论为时已晚... - az01

5
VB.net所需的代码几乎相同:
stream.Seek(&H42, SeekOrigin.Begin)

这里需要注意的几点是:
  • 在Delphi中,$ 是十六进制的前缀。
  • soFromBeginning 对应于 SeekOrigin.Begin

1

$42的值是从流的开头偏移量。

在VB.NET中,它将是:

reader.BaseStream.Seek(66, IO.SeekOrigin.Begin)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接