【问题标题】:convert special char ‘ to hex value in C#在C#中将特殊字符'转换为十六进制值
【发布时间】:2018-10-11 10:18:09
【问题描述】:

我知道如何将字符转换为十六进制。但是当涉及到特殊的 char 正常转换方法时是行不通的。

' 的十六进制值为 91 参考:http://www.aboutmyip.com/AboutMyXApp/AsciiChart.jsp

我的代码

            string text =  "‘";
            char[] chars = text.ToCharArray();
            StringBuilder stringBuilder = new StringBuilder();
            foreach (char c in chars)
            {
                stringBuilder.Append(((Int16)c).ToString("x"));
            }
            String textAsHex = stringBuilder.ToString();

我得到的是 2018 年的输出,但我应该得到的是 91

【问题讨论】:

  • 检查这是否有帮助 - stackoverflow.com/questions/40967540/…
  • 这不是撇号 (U+0091),它是代码点 U+2018 处的左单引号(又名“开卷引号”)。
  • 只是想:您是在考虑 Windows 代码页而不是 Unicode?所有 .NET 字符串都是 Unicode,当您使用 Encoding.ASCII 加载时,超过 0x7f 的“扩展 ASCII”字符将被转换为它们的 Unicode 等价物。
  • ASCII 是 7 位编码。 0x7F 以上的值在字节大小的字符中代表什么取决于代码页。
  • 具体:Windows-1250 code page的0x91位置的字符在Uncode differently中表示,.

标签: c# hex


【解决方案1】:

根据 [@Richard,@harold,@jdweng & @500-Internal server error] 反馈,我找到了解决问题的方法。这将包括扩展 ASCII 表 [将字符转换为十六进制值]

在下面找到工作代码

        private void button3_Click(object sender, EventArgs e)
        {
            string str = "‘";
            var encoding = System.Text.Encoding.Default;
            var values = encoding.GetBytes(str);
            Decimal dec = values[0];
            var hex = ToHexString(dec);
            string result = hex.ToString();
        }

       public static string ToHexString(Decimal dec)
        {
            var sb = new StringBuilder();
            while (dec > 1)
            {
                var r = dec % 16;
                dec /= 16;
                sb.Insert(0, ((int)r).ToString("X"));
            }
            return sb.ToString();
        }

输出为 91

【讨论】:

  • 哪个“扩展 ASCII”表? Encoding.Default 是一个特定的,但它因系统、用户和时间而异。如果足够稳定,它可能正是您想要的。但是,在大多数情况下,您需要一种每个人都知道的特定、固定的字符编码。
猜你喜欢
  • 2012-07-08
  • 2014-09-28
  • 1970-01-01
  • 2018-01-31
  • 2018-01-22
  • 1970-01-01
  • 2013-04-03
  • 2016-03-06
相关资源
最近更新 更多