我需要将一些char转换为int值但大于256.这是我将int转换为char的函数。我需要逆转它
public static string chr(int number)
{
return ((char)number).ToString();
}
此功能不起作用 - 仅返回0-256,ord(chr(i))==i
public static int ord(string str)
{
return Encoding.Unicode.GetBytes(str)[0];
}
答案 0 :(得分:2)
问题是你的ord
函数会将字符串的字符截断为第一个字节,这是由UNICODE编码解释的。这个表达
Encoding.Unicode.GetBytes(str)[0]
// ^^^
返回byte
数组的初始元素,因此它必须保持在0..255范围内。
您可以按照以下方式修复ord
方法:
public static int Ord(string str) {
var bytes = Encoding.Unicode.GetBytes(str);
return BitConverter.ToChar(bytes, 0);
}
答案 1 :(得分:1)
由于您不太关心编码,而是直接在int
函数中将char
投射到chr()
,那么为什么不用其他方式尝试?< / p>
Console.WriteLine((int)'\x1033');
Console.WriteLine((char)(int)("\x1033"[0]) == '\x1033');
Console.WriteLine(((char)0x1033) == '\x1033');
答案 2 :(得分:0)
char在C#
中长2个字节(UTF-16编码)char c1; // TODO initialize me
int i = System.Convert.ToInt32(c1); // could be greater than 255
char c2 = System.Convert.ToChar(i); // c2 == c1
MSDN上的System.Convert:https://msdn.microsoft.com/en-us/library/system.convert(v=vs.110).aspx
答案 3 :(得分:0)
字符和字节在C#中不是一回事。 char和int之间的转换很简单:(char)intValue或(int)myString [x]。