我正在尝试解决此任务: 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);
}
}
}
}
答案 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();