• Status: Solved
• Priority: Medium
• Security: Public
• Views: 215

# Tricky Problem in Visual Basic

Hi,

I have 2 variables kept in string value

strVar1 = "010101010110101.......... " 88 characters
strVar2 = "101001111111111........... " 88 characters

Is there any way of directly OR'ing the values without
writing a function and taking each digit in array and OR'ing

Result should be "11110111111......... "

Thanks,
0
Pankaj27
1 Solution

Simply put, no as there is no intrinsic Binary conversion. Your number anyway would be of the order of  1.54742504910673E+26 so that would be a pain to convert to a decimal or double. This function will do the trick pretty quickly.

Private Sub Command2_Click()
strVar1 = "010101010110101" '88 characters
strVar2 = "101001111111111" '88 characters
MsgBox MyOr(strVar1, strVar2)
End Sub

Private Function MyOr(ByVal BinString1 As String, ByVal BinString2 As String) As String
Dim strResult As String
Dim intPos As Integer
For intPos = 1 To Len(BinString1)
strResult = strResult & (CInt(Mid(BinString1, intPos, 1)) Or CInt(Mid(BinString2, intPos, 1)))
Next
MyOr = strResult
End Function
0

Author Commented:
yes TimCottee,

I have done the Same using Function. But I wanted to avoid the looping during the Or'ing activity (88 times in my case) as this function in turn is called for lot many time depending upon the data coming from server.

0

Well without being able to convert the binary into a number of some datatype or other which you can then do the OR function on directly there is little option. You may be able to create a C++ program (standard dll) that can take your strings and convert to numbers then perform the OR function on the result and return it as a string but in straight VB I don't see an alternative I am afraid.
0

Commented:
your only hope would be to break the 88 character string of Binary digits into 3 LONGS (32 bits each - totakl allows up to 96 bits), then you could OR the corresponding pieces....That might offer a more satisfactory approach.

Arthur Wood
0

Commented:
Pankaj27,
Have you profiled your application to see how long this routine is taking to perform your operation? I doesn't seem like this would eat up that much time, as compared to converting to a numeric format , OR'ing, then converting back.
0

Commented:
Second,
Would it be possible to break the string down into multiples of 16, or 32? Is 88 characters coming from the server at a time?
0

IT OperationsCommented:
hearing...
0

Commented:
There is not much you can do. A literal "1" is not a 1, likewise for "0". The following code may help you. It is capable of ORing two strings of length 1,000,001 in 0.453125 seconds on a P4 1.5 Ghz. This is not much computing time... Hope you could use it.

Dim s1 As String
Dim s2 As String
Dim s3 As String
Dim b1() As Byte
Dim b2() As Byte
Dim b3() As Byte
Dim i As Long
s1 = "010101010110101"
s2 = "101001111111111"
b1 = StrConv(s1, vbFromUnicode)
b2 = StrConv(s2, vbFromUnicode)
ReDim b3(UBound(b1))
For i = 0 To UBound(b1)
If b1(i) = 49 Or b2(i) = 49 Then
b3(i) = 49
Else
b3(i) = 48
End If
Next i
s3 = StrConv(b3, vbUnicode)
Debug.Print s3
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.