System.Convert:字串 ↔ 位元組 (各進制)
// 字串 → byte (基數 2/8/10/16)
byte b1 = Convert.ToByte("01000001", 2); // 65
byte b2 = Convert.ToByte("255", 10); // 255
byte b3 = Convert.ToByte("42", 16); // 66
// byte → 字串 (指定基數)
string s1 = Convert.ToString(65, 2); // "1000001"
string s2 = Convert.ToString(255, 16); // "FF"
System.BitConverter:基本型別 ↔ 位元組陣列 (記憶體表示)
int i = 1000;
byte[] bytes = BitConverter.GetBytes(i); // 小端序位元組陣列
string hex = BitConverter.ToString(bytes); // "E8-03-00-00" (含分隔符)
// char/string 記憶體編碼驗證
foreach (char c in "測試") {
byte[] cb = BitConverter.GetBytes(c);
Console.WriteLine(BitConverter.ToString(cb)); // Unicode 小端序
}
實驗結論
- .NET
char/string 內部以 **UTF-16 (Unicode)** 儲存。
BitConverter 反映的是記憶體實際位元組序 (小端序)。
- 跨平台/序列化時請明確指定
Encoding.UTF8 / Encoding.Unicode,勿依賴預設值。