Converting BYTE array to INT
Solution 1
As the name suggests, an Int32
is 32 bits, or 4 bytes, so if you want to convert a byte array to an Int32
, it needs to have a length of at least 4, (or more precisely, it needs to have least 4 bytes after the start position).
If all you have is two bytes, maybe you meant to use ToInt16
?
Solution 2
An Int32
is composed of 4 bytes but the array only has 2. One way to work around this is to first convert to Int16
and then to Int32
Console.WriteLine((Int32)(BitConverter.ToInt16(array, 0)));
Note that in this specific usage converting to Int32
from Int16
doesn't change anything because the numbers print the same.
Solution 3
The documentation on BitConverter.ToInt32
says:
The ToInt32 method converts the bytes from index startIndex to startIndex + 3 to an Int32 value.
You need to specify at least 4 bytes, but you only have 2.
Solution 4
This is an old question, but for .NET Core / .NET Standard > 2.1 there is new solution:
The System.Buffers.Binary.BinaryPrimitives
class provides two static methods ReadInt32BigEndian
and ReadInt32LittleEndian
for this purpose.
Using this these methods has two advantages:
- It lets you explicitly specify if your number is stored as little endian or big endian.
- They accept a
Span<T>
which can be a performance advantage, depending on the scenario.
Related videos on Youtube
user1317200
Updated on May 06, 2020Comments
-
user1317200 about 4 years
I have this kind of code
static void Main(string[] args) { byte[] array = new byte[2] { 0x00, 0x1f }; Console.WriteLine(BitConverter.ToInt32(array, 0)); }
However it does not work. It throws an exception:
Destination array is not long enough to copy all the items in the collection. Check array index and length.
What is wrong?
-
Andrejovich over 10 yearsJust as writing the decimal number "10" as "0010" doesn't change anything else either: the additional zeroes are meaningless, and you're more or less doing the same when you convert an Int16 to an Int32.
-
computercarguy about 2 yearsFYI, Visual Studio 2022 using .Net 6 says the
Int32
conversion is redundant.