读取二进制值(例如1000,1001,1010,1011 ......)作为数字数组

时间:2015-01-27 16:28:00

标签: vba ms-access binary

我正在寻找以下任务的解决方案:

一般环境:我正在开发一个VBA功能工具箱,用于处理教育优惠的Access数据库中的数据。这包括各种字符串操作和主要通过SQL的数据库字段操作。

在我的一个函数中,我必须连续处理四个数据库字段的不同状态,它们的值为NULL或不为NULL。由于每个字段可以是NULL或非NULL,我们有16种可能的情况:

0-0-0-0,0-0-0-1,0-0-1-0,0-0-1-1依此类推,

显然与:

完全相同

00000001001000110100,...,1111,即十进制0的二进制表示形式15。

为了不对每个案例进行硬编码,我希望通过从0到15的计数来使用数字0-15的二进制表示。

在伪代码中:

i = 0
For i = 0 To 15
  arrX(): 0000
  StateOfField01 = arrX(0) [which is 0, in this case]
  StateofField02 = arrX(1) [dito]
  StateOfField03 = arrX(2) [dito] 
  StateofField04 = arrX(3) [dito]
  Do something with the fields, depending on their state
  i = i + 1
Next i 

到目前为止,我对自己的想法很满意,但有一件事我不知道如何解决:

如何从i的二进制表示中获取每个包含四位数的数组?

2 个答案:

答案 0 :(得分:1)

这是一个将十进制数转换为二进制字符串的函数。

Public Function GetBinary(Number As Long) As String
'********************
'Code Courtesy of
'  Paul Eugin
'********************
    Dim resultStr As String, nLen As Integer

    Do While Number > 0
        resultStr = resultStr & (Number Mod 2)
        Number = Int(Number / 2)
    Loop

    GetBinary = Format(StrReverse(resultStr), "0000")

End Function

该功能将采用"数字"作为您想要找到二进制等效项的参数。代码末尾的Format函数将确保返回值至少为4个字面值。所以,如果您通过示例,

? GetBinary(5)
0101

答案 1 :(得分:0)

基于PaulFrancis'输入,我发现以下解决方案回答了我的正确需求。

重要的补充是1)" ByVal"对于调用中的参数,以便可以从另一个应该保留for-next计数器的过程内部调用该函数; 2)测试" Number"是0,以前没有涉及。

Public Function GetBinary(ByVal Number As Integer) As String

Dim resultStr As String

If Number = 0 Then
    resultStr = "0"
Else
    Do While Number > 0
        resultStr = resultStr & (Number Mod 2)
        Number = Int(Number / 2)
    Loop
End If

GetBinary = Format(StrReverse(resultStr), "0000")

End Function
'-----------------------------------
Public Sub TestBinaryToString()
'Purpose: Testing the GetBinary() function: 
'output will be displayed in the Immediate Window

Dim i As Integer
Dim strBin As String

For i = 0 To 15
    strBin = GetBinary(i)
    Debug.Print i; " --> "; strBin
Next i

End Sub