Java byte[] to VB.NET byte[], part deux

Following on from the prior post, there are other options for converting an array of Java bytes to an array of .NET bytes. One is to do the signed-to-unsigned conversion on the Java side. Like this:

    public static String asHex (byte buf[])

    {

        StringBuffer strbuf = new StringBuffer(buf.length * 2);

        int i;

        for (i = 0; i < buf.length; i++)

        {

            if (((int) buf[i] & 0xff) < 0x10)

                strbuf.append("0");

            strbuf.append(Long.toString((int) buf[i] & 0xff, 16));

        }

        return strbuf.toString();

    }

For an array like this:

byte[] b= { -24, 23, -40, 41, 56, -2, 11, 77, 52, -13 };

That would generate a string like this:

e817d82938fe0b4d34f3

Then the VB conversion for that would look like this:

  Private Shared Function GetByteArray(data as System.String) as System.Byte()

    Dim b(data.Length/2-1) as System.Byte

    For i As Integer = 0 To data.Length-1 Step 2

      b(i/2)= System.Byte.Parse(data.Substring(i,2).ToUpper(), System.Globalization.NumberStyles.HexNumber )

    Next

    Return b

  End Function

To verify that it's really working, you can convert the resulting array of VB.NET bytes to an array of sbyte, and compare it with the original in the Java app. Like this:

  Private Shared Function ArrayOfByteToArrayOfSbyte(b() as System.Byte) as System.Sbyte()

    Dim sb(b.Length-1) As System.Sbyte

    Dim sb1 as System.Sbyte

    For i As Integer = 0 To b.Length-1

      if (b(i) <= 127) then

        sb1 = System.Convert.ToSbyte(b(i))

      else

        sb1 =System.Convert.ToSbyte( b(i)- 256 )

      end if

      sb(i)= sb1

    Next

    Return sb

  End Function

-Dino