Phương thức BitConverter.ToInt32() trong C# được dùng để chuyển đổi 4 byte từ một mảng byte tại vị trí chỉ định thành một số nguyên 32-bit có dấu (int).
Cú pháp
public static int ToInt32(byte[] value, int startIndex);
value: Mảng byte nguồn.startIndex: Vị trí bắt đầu trong mảng (phải có ít nhất 4 byte từ vị trí này).
Trả về: Số int 32-bit được hình thành từ 4 byte bắt đầu tại startIndex (theo thứ tự little-endian trên hầu hết hệ thống).
Ví dụ 1: Chuyển đổi mảng byte 5 phần tử
using System;
public class Demo
{
public static void Main()
{
byte[] arr = { 10, 20, 30, 40, 50 };
Console.WriteLine("Mảng byte = {0}", BitConverter.ToString(arr)); // 0A-14-1E-28-32
// Duyệt qua các vị trí có thể đọc 4 byte (i từ 1, bước 4)
for (int i = 1; i < arr.Length - 3; i = i + 4)
{
int res = BitConverter.ToInt32(arr, i);
Console.WriteLine("\nGiá trị byte tại [" + i + "] = " + arr[i]);
Console.WriteLine("Kết quả ToInt32 = " + res);
}
}
}
Kết quả
Mảng byte = 0A-14-1E-28-32 Giá trị byte tại [1] = 20 Kết quả ToInt32 = 841489940
Giải thích kết quả (Little-Endian)
Tại chỉ mục 1: 4 byte là {20, 30, 40, 50} (hex: 14, 1E, 28, 32).
Little-endian: byte thấp nhất ở địa chỉ thấp → giá trị = 0x32281E14 = 841,489,940 (decimal).
Ví dụ 2: Mảng byte 9 phần tử
using System;
public class Demo
{
public static void Main()
{
byte[] arr = { 0, 0, 10, 15, 20, 26, 32, 34, 40 };
Console.WriteLine("Mảng byte = {0}", BitConverter.ToString(arr)); // 00-00-0A-0F-14-1A-20-22-28
for (int i = 1; i < arr.Length - 3; i = i + 4)
{
int res = BitConverter.ToInt32(arr, i);
Console.WriteLine("\nGiá trị byte tại [" + i + "] = " + arr[i]);
Console.WriteLine("Kết quả ToInt32 = " + res);
}
}
}
Kết quả
Mảng byte = 00-00-0A-0F-14-1A-20-22-28 Giá trị byte tại [1] = 0 Kết quả ToInt32 = 336529920 Giá trị byte tại [5] = 26 Kết quả ToInt32 = 673325082
Giải thích
- Tại [1]: byte {0, 10, 15, 20} → 0x140F0A00 = 336,529,920
- Tại [5]: byte {26, 32, 34, 40} → 0x2822201A = 673,325,082
Các phương thức liên quan của BitConverter
| Phương thức | Kích thước | Kiểu trả về |
|---|---|---|
ToInt16 |
2 byte | short |
ToInt32 |
4 byte | int |
ToInt64 |
8 byte | long |
ToUInt16 |
2 byte | ushort |
ToUInt32 |
4 byte | uint |
ToUInt64 |
8 byte | ulong |
ToSingle |
4 byte | float |
ToDouble |
8 byte | double |
ToBoolean |
1 byte | bool |
ToChar |
2 byte | char |
ToString(byte[]) |
- | string (hex dump) |
GetBytes(value) |
- | byte[] (ngược lại) |
Lưu ý quan trọng
- Phụ thuộc Endianness của hệ thống (
BitConverter.IsLittleEndian). - Ném
ArgumentNullExceptionnếu mảng null. - Ném
ArgumentOutOfRangeExceptionnếustartIndexvượt phạm vi. - Dùng
BinaryPrimitives(.NET Core 2.1+) để kiểm soát endianness rõ ràng.