How to Convert a byte array into an int array? I have a byte array holding 144 items and the ways I have tried are quite inefficient due to my inexperience. I am sorry if this has been answered before, but I couldn't find a good answer anywhere.
Asked
Active
Viewed 4.4k times
26
-
1What are the ways you have tried? – Marlon Jun 20 '12 at 02:57
-
Just to mention - byte is 8 bit, int is 32 bit, and you are converting a byte to int. All of the converted ints will range from 0 to 255. – Bakudan Jul 26 '17 at 20:16
5 Answers
36
Simple:
//Where yourBytes is an initialized byte array.
int[] bytesAsInts = yourBytes.Select(x => (int)x).ToArray();
Make sure you include System.Linq
with a using declaration:
using System.Linq;
And if LINQ isn't your thing, you can use this instead:
int[] bytesAsInts = Array.ConvertAll(yourBytes, c => (int)c);

vcsjones
- 138,677
- 31
- 291
- 286
-
I got an error: 'byte[]' does not contain a definition for 'Select' and no extension method 'Select' accepting a first argument of type 'byte[]' could be found (are you missing a using directive or an assembly reference?) – user1166981 Jun 20 '12 at 03:04
-
@user1166981: Make sure to reference `System.Linq` in your project. (Which version of the .NET framework are you targeting, by the way?) – Ry- Jun 20 '12 at 03:05
-
This approach is very slow: Linq is not optimized for `byte` block copies. It's _much_ faster to do `int[] bytesAsInts = new int[ yourBytes.Length / 2 ]; Buffer.BlockCopy( yourBytes, 0, bytesAsInts, 0, yourBytes.Length );`. – Dai Aug 03 '21 at 08:40
12
I known this is an old post, but if you were looking in the first place to get an array of integers packed in a byte array (and it could be considering your array byte of 144 elements), this is a way to do it:
var size = bytes.Count() / sizeof (int);
var ints = new int[size];
for (var index = 0; index < size; index++)
{
ints[index] = BitConverter.ToInt32(bytes, index * sizeof (int));
}
Note: take care of the endianness if needed. (And in most case it will)

Kevin Struillou
- 856
- 10
- 19
-
1Nice, was looking for this. People seem to forget that (int)byteVar is not the same as converting a bytearray into an int (for example 4 bytes for one int) – Revils Jul 26 '17 at 06:47
-
2There is a better solution: https://stackoverflow.com/a/5896716/238419 That question is about `int[]` to `byte[]` but this solution should work regardless – BlueRaja - Danny Pflughoeft Aug 28 '17 at 00:40
9
Now It's Simple like follows,
int[] result = Array.ConvertAll(bytesArray, Convert.ToInt32);

Dimuth Ruwantha
- 671
- 2
- 12
- 26
9
Use Buffer.BlockCopy instead of Array.ConvertAll.
ref Converting an int[] to byte[] in C#
byte[] bytes = new byte[] { 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8 };
int[] ints= Array.ConvertAll(bytes, Convert.ToInt32);
will return ints[]={0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8},
not return ints[]={0x04030201,0x08070605}
should use Buffer.BlockCopy(bytes, 0, ints, 0, bytes.Length);

wade.ec
- 181
- 2
- 3
0
What you really need is:
Span<int> integerArray = MemoryMarshal.Cast<byte, int>(byteArray.AsSpan());

user2791333
- 1
- 2
-
This is of course optimal from a performance point of view, but I don't think that was the questioner's intention. You are reinterpreting the byte array as an integer span. I guess the questioner wanted to have an array/span where each byte is seen as an individual integer. – Robin Lindner Aug 22 '23 at 05:03