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

Comments (0)