Android Question Merge two Byte Array in one

Star-Dust

Expert
Licensed User
Longtime User
I have two Byte Array (or more) and I should merge it into one
B4X:
Dim A() As Byte = Array As Byte(23,45,67)
Dim B() As Byte = Array As Byte(223,1,70)

Dim c() As Byte

c= A & B ' Come si può fare?
' I want to get it:   C = (23,45,67,223,1,70)

This operation I have to repeat it for several Array. At the main Buffer (Byte) I have to add other Byte arrays.
How can it be done?


NOTE:
I have already used the ByteConverter library,
B4X:
 ByteConverter.ArrayCopy(OtherArray,0,BufferByte,BufferByte.Length-1,OtherArray.Length)
But it does not work and it generates error
ByteConverter.ArrayCopy(OtherArray,0,BufferByte,BufferByte.Length-1,OtherArray
java.lang.ArrayIndexOutOfBoundsException: src.length=17 srcPos=0 dst.length=0 dstPos=-1 length=17
at java.lang.System.arraycopy(Native Method)
at anywheresoftware.b4a.agraham.byteconverter.ByteConverter.ArrayCopy(ByteConverter.java:227)
at b4a.example.bt_printer._addbuffer_writeline(bt_printer.java:262)
at b4a.example.main._printer(main.java:500)
at b4a.example.main._activity_create(main.java:379)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:186)
 

stevel05

Expert
Licensed User
Longtime User
Try this:
B4X:
    Dim A() As Byte = Array As Byte(23,45,67)
    Dim B() As Byte = Array As Byte(223,1,70)

    Dim C(A.Length + B.Length) As Byte

    Dim BC As ByteConverter
    BC.ArrayCopy(A,0,C,0,A.Length)
    BC.ArrayCopy(B,0,C,A.Length,B.Length)
  
    For Each B1 As Byte In C
        Log(Bit.And(B1,0XFF)) 'For display as bytes are signed
    Next
 
Upvote 0

Star-Dust

Expert
Licensed User
Longtime User
thank's. Work it

B4X:
BufferByte=Merge(BufferByte,Text.GetBytes(mEncoding))

B4X:
private Sub Merge(Array1() As Byte, Array2() As Byte) As Object
    Private BC As ByteConverter
    Dim ByteArray(Array1.Length + Array2.Length) As Byte
  
    BC.ArrayCopy(Array1,0,ByteArray,0,Array1.Length)
    BC.ArrayCopy(Array2,0,ByteArray,Array1.Length,Array2.Length)
    Return ByteArray
End Sub

Your suggestion is very clever, thank you again.
 
Upvote 0

Star-Dust

Expert
Licensed User
Longtime User
I blocked thinking of having to declare an array with an indefinite dimension.
But thanks to your suggestion, the right vision was opened to me.

Now I'm using this sub that is more generic and it will also work on any array (though not byte)

B4X:
private Sub Merge(Array1() As Object, Array2() As Object) As Object
    Dim ByteArray(Array1.Length + Array2.Length) As Byte
    For i=0 To Array1.Length-1
        ByteArray(i)=Array1(i)
    Next
    For i=0 To Array2.Length-1
        ByteArray(Array1.Length+i)=Array2(i)
    Next
    Return ByteArray
End Sub
 
Upvote 0

Star-Dust

Expert
Licensed User
Longtime User
BC.ArrayCopy also works on any types of arrays. It will be faster than copying the elements one by one (though the difference will only be significant if you are copying large arrays).
Thanks, I did not know, so the first code should be fine for other types of arrays
 
Upvote 0
Top