我正在尝试解决这个任务: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)
除了:
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)
| 归档时间: |
|
| 查看次数: |
4939 次 |
| 最近记录: |