Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

แปลง Hex String เป็น Hex Number ใน C#

การแปลงสตริงฐานสิบหก (Hexadecimal String) เป็นค่าตัวเลขใน C# ทำได้หลายวิธี ขึ้นอยู่กับช่วงค่าที่ต้องการ

วิธีที่ 1: Convert.ToSByte() - สำหรับค่า -128 ถึง 127

using System;

public class Program
{
    public static void Main()
    {
        string hex = "7D";
        sbyte value = Convert.ToSByte(hex, 16);
        Console.WriteLine(value); // 125
    }
}

วิธีที่ 2: Convert.ToInt32() - สำหรับค่า 32-bit (แนะนำสำหรับทั่วไป)

string hex = "7D";
int value = Convert.ToInt32(hex, 16);
Console.WriteLine(value); // 125

// รองรับค่ามากกว่า
string hexLarge = "FF00AABB";
int large = Convert.ToInt32(hexLarge, 16); // 4278254267 - overflow!
// ใช้ long แทน:
long largeValue = Convert.ToInt64(hexLarge, 16); // 4278254267 ✓

วิธีที่ 3: int.Parse/TryParse กับ NumberStyles.HexNumber

using System.Globalization;

string hex = "7D";
bool success = int.TryParse(hex, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out int value);
// success = true, value = 125

// รองรับ prefix "0x"
string hexWithPrefix = "0x7D";
success = int.TryParse(hexWithPrefix, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out value);

วิธีที่ 4: Convert.ToByte/UInt16/UInt32/UInt64 (Unsigned)

byte b = Convert.ToByte("FF", 16);       // 255
ushort u16 = Convert.ToUInt16("FFFF", 16); // 65535
uint u32 = Convert.ToUInt32("FFFFFFFF", 16); // 4294967295
ulong u64 = Convert.ToUInt64("FFFFFFFFFFFFFFFF", 16); // 18446744073709551615

ตารางเลือกเมธอดตามช่วงค่า

ช่วงค่าเมธอดแนะนำตัวอย่าง Hex
-128 ถึง 127Convert.ToSByte"7F" / "80"
0 ถึง 255Convert.ToByte"FF"
-32,768 ถึง 32,767Convert.ToInt16"7FFF" / "8000"
0 ถึง 65,535Convert.ToUInt16"FFFF"
-2,147,483,648 ถึง 2,147,483,647Convert.ToInt32 / int.Parse"7FFFFFFF" / "80000000"
0 ถึง 4,294,967,295Convert.ToUInt32"FFFFFFFF"
64-bitConvert.ToInt64/UInt6416 hex digits

การจัดการ Error

public static bool TryParseHex(string hex, out int value)
{
    // ลบ prefix ถ้ามี
    if (hex.StartsWith("0x", StringComparison.OrdinalIgnoreCase) ||
        hex.StartsWith("&H", StringComparison.OrdinalIgnoreCase))
    {
        hex = hex.Substring(2);
    }

    return int.TryParse(hex, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out value);
}

แปลงกลับ: Number → Hex String

int value = 125;
string hex = value.ToString("X");      // "7D" (Uppercase)
string hex2 = value.ToString("x");     // "7d" (Lowercase)
string hex4 = value.ToString("X4");    // "007D" (Zero-padded 4 digits)