How To Copy a String to a Byte Array Without Unicode Conversion

Article translations Article translations
Article ID: 187675 - View products that this article applies to.
This article was previously published under Q187675
Expand all | Collapse all

On This Page

SUMMARY

This article demonstrates how to copy a string to a byte array without using a Unicode conversion. This technique is useful if you need to pass a string to a function that requires Unicode. The article includes instructions to create a sample project that demonstrates this information.

MORE INFORMATION

This article assumes that you know the difference between ANSI and Unicode strings. Although Visual Basic internally converts strings to Unicode for processing, strings are passed to functions as ANSI. Some functions, such as NetUserGetInfo, only accept Unicode strings. If you pass a string from Visual Basic to a function that only accepts Unicode strings, the function will return incomprehensible data. To pass a string to a function that only accepts Unicode strings, you need to convert the string into a byte array.

To convert a string to a byte array, create a dynamic byte array. Set your string variable equal to the byte array. When you loop through the individual elements of the byte array, you will get the Unicode character code for that character

In the case of the English character set, the low-order byte value is the same as the ANSI character code for that character while the high-order byte is a zero.

The next section shows how to create a sample project that demonstrates converting a string in Visual Basic to a byte array.

Step-by-Step Example

  1. Start a new Standard EXE project in Visual Basic. Form1 is created by default.
  2. Copy the following code to the Code window of Form1:
          Option Explicit
    
          Private Sub Form_Click()
             Dim strTest As String
             Dim bytArray() As Byte
             Dim intcount As Integer
    
             strTest = "This is my test string."
             bytArray = strTest
    
             For intcount = 0 To UBound(bytArray)
                Debug.Print bytArray(intcount); "= " & Chr(bytArray(intcount))
             Next
          End Sub
    
    						
  3. On the Run menu, click Start or press the F5 key to start the program. Click on the form and see the results in debug window. Because the string variable contains only English characters, each element contains either a Unicode character code corresponding to a English character or a zero.

    To then pass the byte array as a Unicode string argument to an API function, pass the first element of the byte array. By default, the first element is 0 unless either the first element is clearly different in the array declaration or Option Base 1 is specified in your module. For an example of passing a byte array to the NetUserGetInfo function, please see the following article in the Microsoft Knowledge Base:

    151774 : How To Call NetUserGetInfo API from Visual Basic

REFERENCES

For more information about ANSI and Unicode, see Chapter 16 "International Issues" in Part 2 of the Visual Basic Programmer's Guide.

Properties

Article ID: 187675 - Last Review: June 29, 2004 - Revision: 3.1
APPLIES TO
  • Microsoft Visual Basic 5.0 Learning Edition
  • Microsoft Visual Basic 6.0 Learning Edition
  • Microsoft Visual Basic 5.0 Professional Edition
  • Microsoft Visual Basic 6.0 Professional Edition
  • Microsoft Visual Basic 5.0 Enterprise Edition
  • Microsoft Visual Basic 6.0 Enterprise Edition
Keywords: 
kbhowto KB187675

Give Feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com