VB有几个本机函数,用于将char转换为ASCII值,反之亦然 - Asc()和Chr().
现在我需要在C#中获得等效的功能.什么是最好的方式?
您始终可以添加对Microsoft.VisualBasic的引用,然后使用完全相同的方法:Strings.Chr和Strings.Asc.
这是获得完全相同功能的最简单方法.
因为Asc()
你可以把char
它int
变成这样:
int i = (int)your_char;
因为Chr()
你可以char
从int
这样的方式回到:
char c = (char)your_int;
这是一个小程序,演示了整个事情:
using System; class Program { static void Main() { char c = 'A'; int i = 65; // both print "True" Console.WriteLine(i == (int)c); Console.WriteLine(c == (char)i); } }
我使用resharper来获得这些,确切的代码由VB在您的计算机上运行
////// Returns the character associated with the specified character code. /// /// ////// Returns the character associated with the specified character code. /// /// Required. An Integer expression representing the, or character code, for the character. < 0 or > 255 for Chr. 1 public static char Chr(int CharCode) { if (CharCode < (int) short.MinValue || CharCode > (int) ushort.MaxValue) throw new ArgumentException(Utils.GetResourceString("Argument_RangeTwoBytes1", new string[1] { "CharCode" })); if (CharCode >= 0 && CharCode <= (int) sbyte.MaxValue) return Convert.ToChar(CharCode); try { Encoding encoding = Encoding.GetEncoding(Utils.GetLocaleCodePage()); if (encoding.IsSingleByte && (CharCode < 0 || CharCode > (int) byte.MaxValue)) throw ExceptionUtils.VbMakeException(5); char[] chars = new char[2]; byte[] bytes = new byte[2]; Decoder decoder = encoding.GetDecoder(); if (CharCode >= 0 && CharCode <= (int) byte.MaxValue) { bytes[0] = checked ((byte) (CharCode & (int) byte.MaxValue)); decoder.GetChars(bytes, 0, 1, chars, 0); } else { bytes[0] = checked ((byte) ((CharCode & 65280) >> 8)); bytes[1] = checked ((byte) (CharCode & (int) byte.MaxValue)); decoder.GetChars(bytes, 0, 2, chars, 0); } return chars[0]; } catch (Exception ex) { throw ex; } } ////// Returns an Integer value representing the character code corresponding to a character. /// /// ////// Returns an Integer value representing the character code corresponding to a character. /// /// Required. Any valid Char or String expression. Ifis a String expression, only the first character of the string is used for input. If is Nothing or contains no characters, an error occurs. 1 public static int Asc(char String) { int num1 = Convert.ToInt32(String); if (num1 < 128) return num1; try { Encoding fileIoEncoding = Utils.GetFileIOEncoding(); char[] chars = new char[1] { String }; if (fileIoEncoding.IsSingleByte) { byte[] bytes = new byte[1]; fileIoEncoding.GetBytes(chars, 0, 1, bytes, 0); return (int) bytes[0]; } byte[] bytes1 = new byte[2]; if (fileIoEncoding.GetBytes(chars, 0, 1, bytes1, 0) == 1) return (int) bytes1[0]; if (BitConverter.IsLittleEndian) { byte num2 = bytes1[0]; bytes1[0] = bytes1[1]; bytes1[1] = num2; } return (int) BitConverter.ToInt16(bytes1, 0); } catch (Exception ex) { throw ex; } } ////// Returns an Integer value representing the character code corresponding to a character. /// /// ////// Returns an Integer value representing the character code corresponding to a character. /// /// Required. Any valid Char or String expression. Ifis a String expression, only the first character of the string is used for input. If is Nothing or contains no characters, an error occurs. 1 public static int Asc(string String) { if (String == null || String.Length == 0) throw new ArgumentException(Utils.GetResourceString("Argument_LengthGTZero1", new string[1] { "String" })); return Strings.Asc(String[0]); }
资源只是存储的错误消息,因此您想以某种方式忽略它们,而其他两种您无权访问的方法如下:
internal static Encoding GetFileIOEncoding() { return Encoding.Default; } internal static int GetLocaleCodePage() { return Thread.CurrentThread.CurrentCulture.TextInfo.ANSICodePage; }