将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);
}
}
}
}
除了之外,您做的一切都很好
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();