I have following code that works perfect for my project.
The string s2 contains hexadecimal values that need to be splitted up in bytes (Uint8) into an array lVal()
X is the CString containing the created array.
Dim i As Integer Dim k As Integer Dim s2 As String Dim s3 As String Dim n As Uint8 Dim lVal(5) As Uint8 Dim X As CString s2 = "F0 43 73 26 00 F7" ' Remove all spaces in string s3 = RepalceAll(s2, " ", "") s2 = s3 ' convert string to Uint8 (bytes) i=0 for k = 1 to len(s2) step 2 s3 = midB(s2, k, 2) n = val("&h" + s3) lVal(i) = n if n = 247 Then Exit ' 247 = &HF7 i = i + 1 Next X = ChrB(lVall(0)) + ChrB(lVal(1)) + ChrB(lVal(2)) + ChrB(lVal(3)) + ChrB(lVal(4)) + ChrB(lVal(5)) ' send X to a dll that accepts CString rtn = HpInsertSysex(Hpid, lTime, X)
As mentioned this works perfect, even with the 00 included into the string s2.
In my project the length of s2 can be up to 383 characters (127 bytes + spaces).
So it would be a long X = ChrB(lVal(0)) + ChrB(lVal(1)) + .......... + ChrB(lVal127)).
So I tried the following in my code
Replace X = ChrB(lVall(0)) + ChrB(lVal(1)) + ChrB(lVal(2)) + ChrB(lVal(3)) + ChrB(lVal(4)) + ChrB(lVal(5)) by
for i = 0 to 5 X = X + ChrB(lVal(i)) Next
This does work if there are no '00' in the string s2.
If a '00' exists in the string the CString does not includes this '00'.
I know a CString is Null terminated and this seems normal because ChrB(&H00) = a Null,
but why does it works even with 00 if i define X as ChrB() + Chrb() + .... and not if I create it with a for next code ?
Can anyone explain why and is there a solution ?