Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Phương thức BitConverter.ToInt32() trong C#

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 ArgumentNullException nếu mảng null.
  • Ném ArgumentOutOfRangeException nếu startIndex vượt phạm vi.
  • Dùng BinaryPrimitives (.NET Core 2.1+) để kiểm soát endianness rõ ràng.