将Integer或Hexadecimal值转换为unicode点

时间:2014-04-18 09:00:30

标签: c# unicode

我正在尝试解决此任务: http://www.codeabbey.com/index/task_view/parity-control 但作为输出,我在网站和Visual Studio控制台的空白处得到了很多问号。 如果我尝试打印,让我们说,160作为一个字符(\' u016​​0')一切正常,但如果我将int转换为char,我会获得空格。 我搜索了互联网并尝试了从十六进制到char的一些转换,但它们的工作方式与将int转换为char的方式相同,我再次获得了空白区域。

为什么我会收到这些问号,是否必须更改编码或其他内容?我可以从十六进制或int创建一个unicode点然后只做: char output = convertedValue; 这是我上面任务的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Globalization;
using System.Text.RegularExpressions;



class Program
{
    static void Main(string[] args)
    {

        string buffer = Console.ReadLine();
        string[] container = buffer.Split(' ');
        byte[] asciiCodes = new byte[container.Length];

        for (int i = 0; i < container.Length; i++)
        {
            asciiCodes[i] = byte.Parse(container[i]);
        }

        for (int i = 0; i < asciiCodes.Length; i++)
        {
            byte currNumber = asciiCodes[i];
            string binaryRepresent = Convert.ToString(currNumber, 2).PadLeft(8, '0');
            int counter = 0;
            for (int j = 0; j < binaryRepresent.Length; j++)
            {
                if(binaryRepresent[j] == '1')
                {
                    counter++;
                }
            }

            if(counter % 2 == 0)
            {
                char output = Convert.ToChar(currNumber);
                Console.Write(output);
            }

        }
    }
}

1 个答案:

答案 0 :(得分:4)

除了:

之外,你正在做的一切正常

u0160以十六进制格式表示,表示160十六进制== 352十进制

所以,如果你运行

Convert.ToChar(352);

您将获得Š

Convert.ToChar(160)正在解析unicode符号u00A0(A0十六进制= 160十进制),该符号为"No-break space",您会看到一个空格。

如果您需要从十六进制字符串转换代码,反之亦然,请按照以下步骤操作:

string s = "00A0";
//to int
int code = int.Parse(s, System.Globalization.NumberStyles.HexNumber);
//back to hex
string unicodeString = char.ConvertFromUtf32(code).ToString();