将整数或十六进制值转换为 unicode 点

Val*_*ous 5 c# unicode

我正在尝试解决这个任务:http : //www.codeabbey.com/index/task_view/parity-control 但是作为输出,我在网站上得到了很多问号,在 Visual Studio 控制台中得到了很多空格。如果我尝试打印,比如 160 作为字符 (\'u0160') 一切正常,但是如果我将 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);
            }

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

And*_*rew 8

除了:

u0160 以十六进制格式表示,这意味着 160 十六进制 == 352 十进制

所以如果你跑

Convert.ToChar(352);
Run Code Online (Sandbox Code Playgroud)

你会得到Š

Convert.ToChar(160)正在解析 unicode 符号u00A0(A0 hex = 160 dec),该符号是 a"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();
Run Code Online (Sandbox Code Playgroud)