public static string Str2Hex(string s)
{
string result = string.Empty;
byte[] arrByte = System.Text.Encoding.GetEncoding("GB2312").GetBytes(s);
for(int i = 0; i < arrByte.Length; i++)
{
result += "&#x" + System.Convert.ToString(arrByte[i], 16) + ";"; //Convert.ToString(byte, 16)把byte轉化成十六進制string
}
return result;
}
變成可以在網上傳輸的那種16進制編碼,類似%8D%E2這種?這樣的話,
用System.Web.HTTPUtility.URLEncode()就行。
光光10進制轉換到16進制的話,可以用 bytes(i).ToString("X"),
這是將一個字節轉換為一個16進制字符串,"X"表示大寫16進制字符,用"x"可以得到小寫的。
參考
字符串(含有漢字)轉化為ascII16進制問題
http://topic.csdn.net/t/20040905/22/3342635.html
加碼解碼
http://xiaodi.cnblogs.com/archive/2005/04/26/145493.aspx
public string EncodingSMS(string s)
{
string result = string.Empty;
byte[] arrByte = System.Text.Encoding.GetEncoding("GB2312").GetBytes(s);
for(int i = 0; i < arrByte.Length; i++)
{
result += System.Convert.ToString(arrByte[i], 16); //Convert.ToString(byte, 16)把byte轉化成十六進制string
}
return result;
}
public string DecodingSMS(string s)
{
string result = string.Empty;
byte[] arrByte = new byte[s.Length / 2];
int index = 0;
for(int i = 0; i < s.Length; i += 2)
{
arrByte[index++] = Convert.ToByte(s.Substring(i,2),16); //Convert.ToByte(string,16)把十六進制string轉化成byte
}
result = System.Text.Encoding.Default.GetString(arrByte);
return result;
}
加碼解碼的規則如下:
加碼時將字符串中的所有字符轉換成其對應的ASCII值的16進制值,例如:“A”的ASCII碼值為65,以16進制值表示為41,故應發送兩個字符“41”以代表字符“A”。
對於漢字則以其內碼的16進制值來表示,如“測試”應為:B2E2CAD4。
原理:
string aaa = "AB測試";
byte[] bbb = System.Text.Encoding.Default.GetBytes(aaa);
string ccc = System.Text.Encoding.Default.GetString(bbb);
for(int i = 0; i < bbb.Length; i++)
{
Response.Write(System.Convert.ToString(bbb[i], 16));
}
Response.Write(ccc);
a1 = 0x01; //0000 0001
a2 = 0x00; //0000 0000
a3 = 0x03; //0000 0011
a4 = 0x02; //0000 0010
b1 = a1 ^ a2; //0000 0001
b2 = a1 ^ a3; //0000 0010
b3 = a1 ^ a4; //0000 0011
^異或運算符,位值相同為0,不同為1,見上示例.
//
簡單實際問題舉例:
======\=======\=======
======a=======b=======
上面是2條電路,2個開關分別為a和b,打開狀態:\[1],關閉狀態:/[0].
若同時打開或者關閉,兩條電路均不通.
若a打開[1],b關閉[0],電路1通電
======\=======/=======
若a關閉[0],b打開[1],電路2通電
======/=======\=======
綜上,電路在a,b狀態相同時不通[0],在a,b不同時通電[1].
a1 = 0x01; //0000 0001
a2 = 0x00; //0000 0000
a3 = 0x03; //0000 0011
a4 = 0x02; //0000 0010
b1 = a1 ^ a2; //0000 0001
b2 = a1 ^ a3; //0000 0010
b3 = a1 ^ a4; //0000 0011
^異或運算符,位值相同為0,不同為1,見上示例.
//
簡單實際問題舉例:
======\=======\=======
======a=======b=======
上面是2條電路,2個開關分別為a和b,打開狀態:\[1],關閉狀態:/[0].
若同時打開或者關閉,兩條電路均不通.
若a打開[1],b關閉[0],電路1通電
======\=======/=======
若a關閉[0],b打開[1],電路2通電
======/=======\=======
綜上,電路在a,b狀態相同時不通[0],在a,b不同時通電[1].