Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我想把十六进制转换成Ascii码_C#_Hex_Ascii_Data Conversion - Fatal编程技术网

C# 我想把十六进制转换成Ascii码

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

我想把十六进制转换成ascii码

我尝试了两种不同的方法。但我不可能成功

方法1:

 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'}你发布的数据有效。如果你发布的是坏数据,我将有机会修改代码。我上传了文件,请帮助我。