Converting BYTE array to INT

40,003

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:

  1. It lets you explicitly specify if your number is stored as little endian or big endian.
  2. They accept a Span<T> which can be a performance advantage, depending on the scenario.
Share:
40,003

Related videos on Youtube

user1317200
Author by

user1317200

Updated on May 06, 2020

Comments

  • user1317200
    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
    Andrejovich over 10 years
    Just 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
    computercarguy about 2 years
    FYI, Visual Studio 2022 using .Net 6 says the Int32 conversion is redundant.