将Integer或Hexadecimal值转换为unicode点

本文关键字:unicode 转换 Integer Hexadecimal | 更新日期: 2023-09-27 17:58:49

我正在尝试解决此任务:http://www.codeabbey.com/index/task_view/parity-control但作为输出,我在网站上得到了很多问号,在visual studio控制台上也有空白。如果我尝试打印,比方说,160作为一个字符('''0160'),一切都很好,但如果我将int转换为字符,我会得到空白。我在互联网上搜索了一下,尝试了一些从十六进制到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);
            }
        }
    }
}

将Integer或Hexadecimal值转换为unicode点

除了之外,您做的一切都很好

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

所以如果你运行

Convert.ToChar(352);

你会得到Š

Convert.ToChar(160)正在解析unicode符号u00A0(A0 hex=160 dec),该符号是一个"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();