การแปลงสตริงฐานสิบหก (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 ถึง 127 | Convert.ToSByte | "7F" / "80" |
| 0 ถึง 255 | Convert.ToByte | "FF" |
| -32,768 ถึง 32,767 | Convert.ToInt16 | "7FFF" / "8000" |
| 0 ถึง 65,535 | Convert.ToUInt16 | "FFFF" |
| -2,147,483,648 ถึง 2,147,483,647 | Convert.ToInt32 / int.Parse | "7FFFFFFF" / "80000000" |
| 0 ถึง 4,294,967,295 | Convert.ToUInt32 | "FFFFFFFF" |
| 64-bit | Convert.ToInt64/UInt64 | 16 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)