#### vincentehsu

##### Member
Longtime User
Could anybody answer me what's going on?
B4X:
``````Dim t(10) As Byte
t(0)=0x00
t(1)=0x2e
t(2)=0x6a
t(3)=0x9c
t(4)=0x01
t(5)=0x00
t(6)=0x9f
t(7)=0x02
t(8)=0x06
t(9)=0x00
Dim i As Int
For i=0 To t.Length-1
Log(Bit.ParseInt(t(i),10))
Next``````

log file
B4X:
``````0
46
106
-100
1
0
-97
2
6
0``````

#### picenainformatica

##### Active Member
Longtime User
B4X:
``Log(Bit.ParseInt(t(i),16))``

#### vincentehsu

##### Member
Longtime User
by the way ,how can i do the xor function like
B4X:
``t(1) xor (t2) xor (t3) xor (t4) xor (t5) xor (t6) xor (t7)``

#### picenainformatica

##### Active Member
Longtime User
B4X:
``````Dim j AsInt=t(1)
Dim i as int
For i=2 To 7
j=j xor Bit.ParseInt(t(i),16))
next``````

#### vincentehsu

##### Member
Longtime User
B4X:
``````Dim t(10) As Byte
t(0)=0x00
t(1)=0x2e
t(2)=0x6a
t(3)=0x9c
t(4)=0x01
t(5)=0x00
t(6)=0x9f
t(7)=0x02
t(8)=0x06
t(9)=0x00
Dim i As Int
For i=0 To t.Length-1
Log(Bit.ParseInt(t(i),10))
Next``````

My understanding : my original byte is base 16 and i wanna convert to base 10 , i should use Bit.ParseInt(t(i),10) right?
on my log file
B4X:
``````0
46
106
-100
1
0
-97
2
6
0``````

there are only 2 bytes convert error at t(3) and t(6) why?

#### James Chamblin

##### Active Member
Longtime User
My understanding : my original byte is base 16 and i wanna convert to base 10 , i should use Bit.ParseInt(t(i),10) right?
on my log file
no, the bytes are stored as base 2. Your source code is using base 16, but the values are converted to base 2 during compiling.

there are only 2 bytes convert error at t(3) and t(6) why?
There is no error, it is just a misunderstanding of how Bytes work in Java and misuse of ParseInt().

Bytes are stored as signed values in the range of -128 to 127. If you try and assign a value higher than 127, it will be interpreted as a two's compliment value and stored as a negative value. The binary representation will be the same, but will be treated as a negative when used in math or printed to the screen. SO when you are storing 0x9c in a byte, it is stored as -100 instead.

ParseInt() is not for converting bytes to Ints, instead it is for converting strings to ints. Passing bytes, then converting to Int really does nothing except eat up processing cycles.

To correctly convert all the Bytes into Ints, you just need to cast to the correct type and mask the result with Bit.AND().
B4X:
``````    Dim t(10) As Byte
t(0)=0x00
t(1)=0x2e
t(2)=0x6a
t(3)=0x9c
t(4)=0x01
t(5)=0x00
t(6)=0x9f
t(7)=0x02
t(8)=0x06
t(9)=0x00
Dim i As Int
For i=0 To t.Length-1
Log(Bit.AND(t(i),0xFF))
Next``````
The Bit.AND takes an Int as its first parameter. We are passing a Byte, but it is internally cast to an Int. The 0xFF will strip off the sign bits, leaving the original value instead of its negative version.

Results:
B4X:
``````0
46
106
156
1
0
159
2
6
0``````

#### vincentehsu

##### Member
Longtime User
I see, what if i wanna convert to real binary like "0010",what i should do?
and I wanna do the xor function like
B4X:
``t(1) xor (t2) xor (t3) xor (t4) xor (t5) xor (t6) xor (t7)``
in the earlier post picenainformatica gave me the code
B4X:
``````For i=2 To 7
j=j xor Bit.ParseInt(t(i),16))
Next``````
it's present syntax

#### James Chamblin

##### Active Member
Longtime User
I'm not sure what picenainformatica is trying to accomplish. xor isn't even a B4A keyword. To xor two numbers together, you need to use Bit.Xor() function. Also, you don't need to convert to binary, everything is already stored as binary in memory. If you mean how to convert to a string representing the binary value, you use Bit.ToBinaryString()
B4X:
``````    Dim i As Byte
Dim j As Byte = 0
Dim t(10) As Byte
t(0)=0x00
t(1)=0x2e
t(2)=0x6a
t(3)=0x9c
t(4)=0x01
t(5)=0x00
t(6)=0x9f
t(7)=0x02
t(8)=0x06
t(9)=0x00
For i = 0 To 9
j = Bit.Xor(t(i),j)
Next
Log (Bit.ToBinaryString(j))``````

Replies
51
Views
13K
Replies
6
Views
1K
Replies
4
Views
2K
Replies
13
Views
2K
Replies
3
Views
2K