C# 我想把十六进制转换成Ascii码
我想把十六进制转换成ascii码 我尝试了两种不同的方法。但我不可能成功 方法1:C# 我想把十六进制转换成Ascii码,c#,hex,ascii,data-conversion,C#,Hex,Ascii,Data Conversion,我想把十六进制转换成ascii码 我尝试了两种不同的方法。但我不可能成功 方法1: public void ConvertHex(String hexString) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < hexString.Length; i += 2) { String hs = hexString.Substring
public void ConvertHex(String hexString)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < hexString.Length; i += 2)
{
String hs = hexString.Substring(i, i + 2);
System.Convert.ToChar(System.Convert.ToUInt32(hexString.Substring(0, 2), 16)).ToString();
}
String ascii = sb.ToString();
StreamWriter wrt = new StreamWriter("D:\\denemeASCII.txt");
wrt.Write(ascii);
}
public void ConvertHex(字符串hexString)
{
StringBuilder sb=新的StringBuilder();
for(int i=0;i
方法2:
public string HEX2ASCII(string hex)
{
string res = String.Empty;
for (int a = 0; a < hex.Length; a = a + 2)
{
string Char2Convert = hex.Substring(a, 2);
int n = Convert.ToInt32(Char2Convert, 16);
char c = (char)n;
res += c.ToString();
}
return res;
}
公共字符串HEX2ASCII(字符串十六进制)
{
string res=string.Empty;
对于(int a=0;a<十六进制长度;a=a+2)
{
字符串Char2Convert=十六进制子字符串(a,2);
int n=转换为32(字符转换,16);
字符c=(字符)n;
res+=c.ToString();
}
返回res;
}
传入错误消息:(
我该怎么办呢?你的“方法1”有几次被改写的机会。(你的“方法2”没有希望了。)
因此,在“Method1”中,您执行String hs=hexString.Substring(i,i+2)
,然后您忘记了hs
曾经存在。(编译器不应该就此向您发出警告吗?)然后继续执行System.Convert.ToChar(System.Convert.ToUInt32(hexString.Substring(0,2,16))
但是hexString。子字符串(0,2)
将始终选择hexString
的前两个字符,而不是i
所指的两个字符。您可能想做的是:System.Convert.ToChar(System.Convert.ToUInt32(hs,16))
另外,您正在声明一个
StringBuilder sb;
,但从未向其中添加任何内容。同时,System.Convert.ToChar()
不会产生副作用;它会返回一个值;如果不处理返回的值,则返回的值将永远丢失。您可能想做的是添加System.Convert.ToChar()的结果
到您的StringBuilder
您的输入中没有有效字符。c#中的字符是两字节类,具有私有属性,指示字符是一个字节还是两个字节。编码库方法(unicode、UTF6、UTF7、UTF8)通常进行转换并设置私有属性。很难通过输入判断是否转换为一个或两个字节,以及输入是big-endian还是little-endian。下面的代码转换为byte[]和int16[]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string input = "0178 0000 0082 f000 0063 6500 00da 6400 00be 0000 00ff ffff ffff ffff ffd6 6600";
ConvertHex(input);
}
static void ConvertHex(String hexString)
{
Int16[] hexArray = hexString.Split(new char[] {' '},StringSplitOptions.RemoveEmptyEntries)
.Select(x => Int16.Parse(x, NumberStyles.HexNumber)).ToArray();
byte[] byteArray = hexArray.Select(x => new byte[] { (byte)((x >> 8) & 0xff), (byte)(x & 0xff) }).SelectMany(x => x).ToArray();
}
}
}
请粘贴代码而不是imagesok。我正在添加。您正在尝试将一个十六进制数(由数字0到F组成)转换为Int32。解析器在遇到其中一个a~F数字时将引发异常,因为它们是字母。Int32解析器不知道它们实际上是十六进制数字。是黑色背景上的白色字母吗图像应该在某种程度上与问题相关,还是纯粹是装饰性的?如果相关,那么您可能需要解释它显示的内容。您要解析的是文本文件的内容吗?是您试图模拟的十六进制转储的结果吗?在这两种情况下,“将十六进制转换为ascii”不是您想要的,因此该图像的存在非常奇怪..int16[]hexArray=hexStri…此代码给出错误。输入中必须有其他字符,如“\n”。请尝试:new char[]{',“\t',“\r',“\n'}你发布的数据有效。如果你发布的是坏数据,我将有机会修改代码。我上传了文件,请帮助我。