2012-06-20 68 views
12

Làm thế nào để chuyển đổi một mảng byte thành một mảng int? Tôi có một mảng byte giữ 144 mục và cách tôi đã thử là khá kém hiệu quả do sự thiếu kinh nghiệm của tôi. Tôi xin lỗi nếu điều này đã được trả lời trước đó, nhưng tôi không thể tìm thấy câu trả lời hay ở đâu cả.Làm thế nào để chuyển đổi một mảng byte thành một mảng int?

+1

những cách bạn đã cố gắng như thế nào? – Marlon

+0

Chỉ cần đề cập - byte là 8 bit, int là 32 bit và bạn đang chuyển đổi byte thành int. Tất cả các int được chuyển đổi sẽ nằm trong khoảng từ 0 đến 255. – Bakudan

Trả lời

22

đơn giản:

//Where yourBytes is an initialized byte array. 
int[] bytesAsInts = yourBytes.Select(x => (int)x).ToArray(); 

Hãy chắc chắn rằng bạn bao gồm System.Linq với một tuyên bố sử dụng:

using System.Linq; 

Và nếu LINQ không phải là điều của bạn, bạn có thể sử dụng thay vì:

int[] bytesAsInts = Array.ConvertAll(yourBytes, c => (int)c); 
+0

Tôi gặp lỗi: 'byte []' không chứa định nghĩa cho 'Chọn' và không có phương pháp mở rộng 'Chọn' chấp nhận đối số đầu tiên của loại 'byte []' có thể được tìm thấy (bạn đang thiếu một chỉ thị bằng cách sử dụng hoặc một tham chiếu lắp ráp?) – user1166981

+0

@ user1166981: Đảm bảo tham chiếu 'System.Linq' trong dự án của bạn. (Bạn đang nhắm mục tiêu phiên bản nào của .NET framework?) – Ryan

+0

ok thats đã xóa lỗi nhờ – user1166981

4

Tôi biết đây là một bài đăng cũ, nhưng nếu bạn đang tìm kiếm ở nơi đầu tiên để có được một mảng các gói số nguyên ed trong một mảng byte (và nó có thể được xem xét byte mảng của bạn 144 yếu tố), đây là một cách để làm điều đó:

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)); 
} 

Lưu ý: chăm sóc endianness nếu cần thiết. (Và trong hầu hết các trường hợp nó sẽ)

+0

Tốt, đang tìm kiếm điều này. Mọi người dường như quên rằng (int) byteVar không giống như chuyển đổi một bytearray thành một int (ví dụ 4 byte cho một int) – Sliver2009

+1

Có một giải pháp tốt hơn: https://stackoverflow.com/a/5896716/238419 Điều đó câu hỏi là về 'int []' thành 'byte []' nhưng giải pháp này nên hoạt động bất kể –

0

Bây giờ Đó là đơn giản như sau,

int[] result = Array.ConvertAll(bytesArray, Convert.ToInt32); 
Các vấn đề liên quan