Convert bytes to int?
Assuming you're on at least 3.2, there's a built in for this:
int.from_bytes
(bytes
,byteorder
, *,signed=False
)...
The argument
bytes
must either be a bytes-like object or an iterable
producing bytes.The
byteorder
argument determines the byte order used to represent the
integer. Ifbyteorder
is"big"
, the most significant byte is at the
beginning of the byte array. Ifbyteorder
is"little"
, the most
significant byte is at the end of the byte array. To request the
native byte order of the host system, usesys.byteorder
as the byte
order value.The
signed
argument indicates whether two’s complement is used to
represent the integer.
## Examples:
int.from_bytes(b'\x00\x01', "big") # 1
int.from_bytes(b'\x00\x01', "little") # 256
int.from_bytes(b'\x00\x10', byteorder='little') # 4096
int.from_bytes(b'\xfc\x00', byteorder='big', signed=True) #-1024
Converting from byte to int in Java
Your array is of byte
primitives, but you're trying to call a method on them.
You don't need to do anything explicit to convert a byte
to an int
, just:
int i=rno[0];
...since it's not a downcast.
Note that the default behavior of byte
-to-int
conversion is to preserve the sign of the value (remember byte
is a signed type in Java). So for instance:
byte b1 = -100;
int i1 = b1;
System.out.println(i1); // -100
If you were thinking of the byte
as unsigned (156) rather than signed (-100), as of Java 8 there's Byte.toUnsignedInt
:
byte b2 = -100; // Or `= (byte)156;`
int = Byte.toUnsignedInt(b2);
System.out.println(i2); // 156
Prior to Java 8, to get the equivalent value in the int
you'd need to mask off the sign bits:
byte b2 = -100; // Or `= (byte)156;`
int i2 = (b2 & 0xFF);
System.out.println(i2); // 156
Just for completeness #1: If you did want to use the various methods of Byte
for some reason (you don't need to here), you could use a boxing conversion:
Byte b = rno[0]; // Boxing conversion converts `byte` to `Byte`
int i = b.intValue();
Or the Byte
constructor:
Byte b = new Byte(rno[0]);
int i = b.intValue();
But again, you don't need that here.
Just for completeness #2: If it were a downcast (e.g., if you were trying to convert an int
to a byte
), all you need is a cast:
int i;
byte b;
i = 5;
b = (byte)i;
This assures the compiler that you know it's a downcast, so you don't get the "Possible loss of precision" error.
How do I convert a byte to an integer in python when it has the byte markers attached?
Use int.from_bytes()
.
>>>
int.from_bytes(b'\x00\x10', byteorder='big')
16
>>>
int.from_bytes(b'\x00\x10', byteorder='little')
4096
>>>
int.from_bytes(b'\xfc\x00', byteorder='big', signed=True)
-1024
>>>
int.from_bytes(b'\xfc\x00', byteorder='big', signed=False)
64512
>>>
int.from_bytes([255, 0, 0], byteorder='big')
16711680
Convert Bytes to Int / uint in C
Yes there is. Assume your bytes are in:
uint8_t bytes[N] = { /* whatever */ };
We know that, a 16 bit integer is just two 8 bit integers concatenated, i.e. one has a multiple of 256 or alternatively is shifted by 8:
uint16_t sixteen[N/2];
for (i = 0; i < N; i += 2)
sixteen[i/2] = bytes[i] | (uint16_t)bytes[i+1] << 8;
// assuming you have read your bytes little-endian
Similarly for 32 bits:
uint32_t thirty_two[N/4];
for (i = 0; i < N; i += 4)
thirty_two[i/4] = bytes[i] | (uint32_t)bytes[i+1] << 8
| (uint32_t)bytes[i+2] << 16 | (uint32_t)bytes[i+3] << 24;
// same assumption
If the bytes are read big-endian, of course you reverse the order:
bytes[i+1] | (uint16_t)bytes[i] << 8
and
bytes[i+3] | (uint32_t)bytes[i+2] << 8
| (uint32_t)bytes[i+1] << 16 | (uint32_t)bytes[i] << 24
Note that there's a difference between the endian-ness in the stored integer and the endian-ness of the running architecture. The endian-ness referred to in this answer is of the stored integer, i.e., the contents of bytes
. The solutions are independent of the endian-ness of the running architecture since endian-ness is taken care of when shifting.
How to convert from []byte to int in Go Programming
You can use encoding/binary's ByteOrder to do this for 16, 32, 64 bit types
Play
package main
import "fmt"
import "encoding/binary"
func main() {
var mySlice = []byte{244, 244, 244, 244, 244, 244, 244, 244}
data := binary.BigEndian.Uint64(mySlice)
fmt.Println(data)
}
Convert bytes array to int python wrong result
What you tried assumes the number is directly encoded as bytes. You actually want to parse it from ascii, which you can do like this:
int(b'9718'.decode('ascii'))
Related Topics
How to Compute the Intersection Point of Two Lines
Argument 1 Has Unexpected Type 'Nonetype'
How to Check If Two Segments Intersect
Read and Write CSV Files Including Unicode with Python 2.7
How to Insert a Column at a Specific Column Index in Pandas
Run a Program from Python, and Have It Continue to Run After the Script Is Killed
Recommendations of Python Rest (Web Services) Framework
Setting Camera Parameters in Opencv/Python
Tkinter: Binding Mousewheel to Scrollbar
How to Get a List of All Classes Within Current Module in Python
How to Use Argsort in Descending Order
Including Non-Python Files with Setup.Py
Convert Pandas Dataframe to Nested JSON
How to Remove Nan Values from a Numpy Array