/// <summary>
/// 傳入單個字符,得到字符的ASCII碼
/// </summary>
/// <param name="chr">湯</param>
/// <returns>-13120</returns>
public static int ASCII(string chr)
{
Encoding ecode = Encoding.GetEncoding("GB18030");
Byte[] codeBytes = ecode.GetBytes(chr);
if (IsTwoBytesChar(chr))
{
// 雙字節碼為高位乘256,再加低位
// 該為無符號碼,再減65536
return (int)codeBytes[0] * 256 + (int)codeBytes[1] - 65536;
}
else
{
return (int)codeBytes[0];
}
}
/// <summary>
/// 傳入單個字符的ASCII碼,得到ASCII碼對應的字符(含雙字節)
/// </summary>
/// <param name="asc">-13120</param>
/// <returns>湯</returns>
public static string Character(int asc)
{
//asc = asc + 65536;
Encoding asciiEncoding = Encoding.GetEncoding("GB18030");
Byte[] chrByte = BitConverter.GetBytes((short)asc);
string strCharacter = string.Empty;
if (asc < 0 || asc > 255)
{
Byte[] chrByteStr = new byte[2];
chrByteStr[0] = chrByte[1];
chrByteStr[1] = chrByte[0];
strCharacter = asciiEncoding.GetString(chrByteStr);
}
else
{
Byte[] chrByteStr = new byte[1];
chrByteStr[0] = chrByte[0];
strCharacter = asciiEncoding.GetString(chrByteStr);
}
return (strCharacter);
}
下面對應單元測試
[TestMethod]
public void CharacterTest()
{
Assert.AreEqual(CommonFuntion.Character(-13120), "湯");
Assert.AreEqual(CommonFuntion.Character(-10544), "中");
}
[TestMethod]
public void ASCIITest()
{
Assert.AreEqual(CommonFuntion.ASCII("中"), -10544);
Assert.AreEqual(CommonFuntion.ASCII("湯"), -13120);
}
[TestMethod]
public void ASCIIAndCharTest()
{
Assert.AreEqual("中", CommonFuntion.Character(CommonFuntion.ASCII("中")));
Assert.AreEqual("湯", CommonFuntion.Character(CommonFuntion.ASCII("湯")));
Assert.AreEqual("A", CommonFuntion.Character(CommonFuntion.ASCII("A")));
Assert.AreEqual("¥", CommonFuntion.Character(CommonFuntion.ASCII("¥")));
Assert.AreEqual(-13120, CommonFuntion.ASCII(CommonFuntion.Character(-13120)));
Assert.AreEqual(-10544, CommonFuntion.ASCII(CommonFuntion.Character(-10544)));
}
