【问题标题】:VB6 - What does the following operation do: x = b(1) + b(2) * &H100&?VB6 - 以下操作做了什么:x = b(1) + b(2) * &H100&?
【发布时间】:2020-06-30 14:34:46
【问题描述】:

阅读一些旧代码以处理从数据库中流式传输的一些数据。对VB6不是很熟悉。

这是对代码外观的粗略概念。只是不完全确定 x 或 y 的值是多少? *&H100& 有什么作用? Chr$(b(3)) 是做什么的?

Private Sub Sub1()
Dim b() as Byte

' b is then read from a file, a bytes string, or from a database object

x = 0
x = b(1) + b(2) * &H100&

y = ""
y = y & Chr$(b(3))

End Sub

【问题讨论】:

    标签: vb6


    【解决方案1】:
    x = b(1) + b(2) * &H100&
    

    ...将两个连续字节转换为 16 位整数。第二个字节是整数的高位部分。如果这两个字节是(比如说)10 和 20,那么结果将是 (20 * 256) + 10,或 5130

    【讨论】:

    • 谢谢,这完全有道理。那么 Chr$(b(3)) 操作呢?从字节 3 到字符的一些转换?
    • Jim 谢谢,但我也想通了。例如,Chr(56) 从整数 56 的 ASCII 表示中返回字符。
    【解决方案2】:

    Jim Mack 已经给出了很好的答案。

    来自Type Characters的更多支持信息:

    Visual Basic 提供了一组标识符类型的字符,您可以 在声明中使用以指定变量的数据类型或 常数。

    &Long Dim M&

    您还可以将整数文字定义为十六进制(以 16 为基数) 带有 &H 前缀的数字

    所以&H100& 是一个被转换为长整数的十六进制数。最后的& 强制转换为 long 以防止溢出错误。

    来自Chr()

    返回一个字符串,其中包含与 指定的字符代码。

    Chr() 函数返回一个变体类型,而 Chr$() 返回一个字符串。

    【讨论】:

    • 也谢谢!感谢明确的答案!对 VB6 并不完全熟悉,但可以做到。
    • 小心! Type Characters 链接指向 VB.Net 文档而不是 VB6。碰巧,您复制到答案中的信息也适用于 VB6,但这并不总是正确的。否则很好的答案
    • 是的...很多专门针对 VB6 的页面都从 MSDN 中消失了。
    • @Idle_Mind - 澄清几点:首先,&H100& 中的尾随 & 在某些情况下需要。它强制进行长整数数学运算,否则当另一个被乘数是大于 256 的短整数时,您可能会出现溢出错误。其次,Chr() 产生 String 类型的 VariantChr$() 产生 String直接。
    • @Idle_Mind:吉姆说的。你应该编辑你的答案并更正最后一句话。你的表达方式是错误的。 VB一般都有这些字符串函数对,例如中间()和中间$()。所有的工作方式都一样:前者返回一个 String 类型的 VARIANT,而后者返回一个实际的 String 变量。在实践中,结果是相同的,只是字符串变化更快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 2019-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    相关资源
    最近更新 更多