Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA中的高字节和低字节_Vba_Excel - Fatal编程技术网

VBA中的高字节和低字节

VBA中的高字节和低字节,vba,excel,Vba,Excel,我尝试从如下数字中查找低/高字节: If TextBox1.Value <> "" Then If TextBox1.Value < 65535 Then Dim lowByte As Byte Dim highByte As Byte Dim number As Long Dim textBoxValueLong As Long textBoxValueLong = Val(TextBox1.Value) lowByte = textBoxValueLong And &

我尝试从如下数字中查找低/高字节:

If TextBox1.Value <> "" Then
If TextBox1.Value < 65535 Then
Dim lowByte As Byte
Dim highByte As Byte
Dim number As Long
Dim textBoxValueLong As Long
textBoxValueLong = Val(TextBox1.Value)
lowByte = textBoxValueLong And &HFF&
highByte = Fix(textBoxValueLong / 256)
number = highByte * 256 + lowByte
Worksheets(1).Cells(1, 1) = highByte
Worksheets(1).Cells(1, 2) = lowByte
Worksheets(1).Cells(1, 3) = number
End If
End If
如果TextBox1.Value为“”,则
如果TextBox1.值小于65535,则
低字节作为字节
Dim highByte As字节
暗数等于长数
Dim TEXTBOXVALUE尽可能长
textBoxValueLong=Val(TextBox1.Value)
lowByte=textBoxValueLong和&HFF&
highByte=修复(textBoxValueLong/256)
数字=高字节*256+低字节
工作表(1)。单元格(1,1)=高字节
工作表(1)。单元格(1,2)=低字节
工作表(1)。单元格(1,3)=数量
如果结束
如果结束
但若数字小于-255,则此字符串中有一个溢出错误
highByte=Fix(textBoxValueLong/256)

怎么了


UPD:如果我使用以下字符串:
highByte=(textBoxValueI和&HFF00&)/256
,则可以将其分成两个字节。但是如何正确地合并它呢?如果我使用数字将highBite和lowByte声明为Long,那么您将能够合并它们

但对于低字节,我建议使用mod运算符

lowByte = textBoxValueLong Mod 256

如果确实需要将
loByte
hiByte
作为
Byte
s,并且必须保持在2字节整数范围内,则应采用以下解决方案:

Sub testInteger()

 Dim sTBV As String

 sTBV = "32767"
 'sTBV = "-32768"

 Dim maxI As Integer
 maxI = 127 * 256 + 255
 Dim minI As Integer
 minI = -128 * 256

 If Val(sTBV) >= minI And Val(sTBV) <= maxI Then

  Dim i As Integer
  i = Val(sTBV)

  Dim loByte As Byte, hiByte As Byte

  loByte = i And &HFF&
  hiByte = (i And &HFF00&) / 256

  Dim j As Integer
  j = Val("&H" & Hex(hiByte) & IIf(Len(Hex(loByte)) = 1, "0" & Hex(loByte), Hex(loByte)))

  MsgBox hiByte & ", " & loByte & ", " & j

 Else

  MsgBox "out of integer range"

 End If

End Sub
Sub testinger()
作为字符串的Dim sTBV
sTBV=“32767”
'sTBV=“-32768”
作为整数的Dim maxI
最大值=127*256+255
作为整数的Dim minI
迷你=-128*256

如果Val(sTBV)>=minI和Val(sTBV),请尝试此操作@杰里米,谢谢你的链接。这有帮助。但是如何连接这些字节呢?如果我尝试
number=highByte*256+lowByte
这里有一个错误(输入有帮助,但为什么?lowByte和highByte在[0…255]范围内)那么为什么使用Long而不是Byte会有帮助呢?感谢您的解释!以及为什么使用Mod 256而不是&HFF&?Mod,因为lowByte=textBoxValueLong和&HFF&不会为负数生成正确的结果,Long是因为highbyte包含负数的结果,而Byte(仅0…255)不允许这样做