Strings and Unicode in VBA

  • Thread starter richardschollar
  • Start date
R

richardschollar

Apologies for a dual post (in Excel.Programming too) but not getting
any response there:

Given the following two code snippets, how come I get different output?


Code:
Sub test()
Dim str As String
Dim b() As Byte
str = "hello"
b() = str
str = ""
For i = LBound(b) To UBound(b)
str = str & b(i) & " "
Next i
Debug.Print str
End Sub


The above produces the following output:


Code:
104 0 101 0 108 0 108 0 111 0


second procedure:


Code:
Sub test2()
Dim str As String
Dim b() As Byte
str = "hello"
b() = StrConv(str, vbUnicode)
str = ""
For i = LBound(b) To UBound(b)
str = str & b(i) & " "
Next i
Debug.Print str
End Sub


Which produces this output:


Code:
104 0 0 0 101 0 0 0 108 0 0 0 108 0 0 0 111 0 0 0


My question is: why the additional zeroes from the second procedure?
Assigning a string to a byte array fills the byte array with the
unicode characters, and I thought this was essentially what the StrConv

function did (with vbUnicode option).


Can anyone settle my curiosity?


Thanks for any/all replies!


Best regards


Richard
 
K

Karl E. Peterson

Hi Richard --
My question is: why the additional zeroes from the second procedure?
Assigning a string to a byte array fills the byte array with the
unicode characters, and I thought this was essentially what the
StrConv function did (with vbUnicode option).

Calling StrConv (with vbUnicode) on a string that's *already* Unicode,
you're telling it to consider every byte to be an ANSI character code, so
it's changing the "normal" 00 bytes to 00 00. Make sense?

Later... Karl
 
R

RichardSchollar

Thanks Karl - yes, it is basically doing the conversion twice.

Thanks for the help!

Richard
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top