Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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#ByteString到ASCII字符串_C#_.net_Bytearray - Fatal编程技术网

C#ByteString到ASCII字符串

C#ByteString到ASCII字符串,c#,.net,bytearray,C#,.net,Bytearray,我正在寻找一种聪明的方法,将十六进制字节值字符串转换为“真实文本”(ASCII字符)字符串 例如,我用十六进制ASCII:48 45 4C 4C 4F写了单词“Hello”。使用某种方法,我希望接收它的ASCII文本(在本例中为“Hello”) 我确信有一个框架方法。如果不是这样,我当然可以实现我自己的方法 谢谢 var str = Encoding.UTF8.GetString(SoapHexBinary.Parse("48454C4C4F").Value); //HELLO PS:Soap

我正在寻找一种聪明的方法,将十六进制字节值字符串转换为“真实文本”(ASCII字符)字符串

例如,我用十六进制ASCII:48 45 4C 4C 4F写了单词“Hello”。使用某种方法,我希望接收它的ASCII文本(在本例中为“Hello”)

我确信有一个框架方法。如果不是这样,我当然可以实现我自己的方法

谢谢

var str = Encoding.UTF8.GetString(SoapHexBinary.Parse("48454C4C4F").Value); //HELLO
PS:
SoapHexBinary
位于
System.Runtime.Remoting.Metadata.W3cXsd2001
命名空间中

PS:
SoapHexBinary
位于
System.Runtime.Remoting.Metadata.W3cXsd2001
命名空间中

我确信有一个框架方法

单一框架方法:否

但是,第二部分:将包含ASCII编码文本的字节数组转换为.NET
字符串(即UTF-16编码的Unicode)确实存在:具体方法是:

第一部分很容易自己完成:一次取两个十六进制数字,解析为十六进制,并转换为
字节
,以存储在数组中。比如:

byte[] HexStringToByteArray(string input) {
  Debug.Assert(input.Length % 2 == 0, "Must have two digits per byte");
  var res = new byte[input.Length/2];

  for (var i = 0; i < input.Length/2; i++) {
    var h = input.Substring(i*2, 2);
    res[i] = Convert.ToByte(h, 16);
  }

  return res;
}
byte[]HexstringToByte数组(字符串输入){
Assert(input.Length%2==0,“每个字节必须有两位数”);
var res=新字节[input.Length/2];
对于(变量i=0;i
编辑:注意:在.NET中标识一个更容易完成第一部分的方法:这是一种更好的方法,可以自己编写(而在一个模糊的命名空间中,它是在mscorlib中实现的,而不需要额外的引用)

我确信有一个框架方法

单一框架方法:否

但是,第二部分:将包含ASCII编码文本的字节数组转换为.NET
字符串(即UTF-16编码的Unicode)确实存在:具体方法是:

第一部分很容易自己完成:一次取两个十六进制数字,解析为十六进制,并转换为
字节
,以存储在数组中。比如:

byte[] HexStringToByteArray(string input) {
  Debug.Assert(input.Length % 2 == 0, "Must have two digits per byte");
  var res = new byte[input.Length/2];

  for (var i = 0; i < input.Length/2; i++) {
    var h = input.Substring(i*2, 2);
    res[i] = Convert.ToByte(h, 16);
  }

  return res;
}
byte[]HexstringToByte数组(字符串输入){
Assert(input.Length%2==0,“每个字节必须有两位数”);
var res=新字节[input.Length/2];
对于(变量i=0;i
编辑:注意:在.NET中标识一个更容易完成第一部分的方法:这是一种更好的方法,可以自己编写(在一个可能不太清楚的命名空间中,它是在mscorlib中实现的,而不需要额外的引用)。

StringBuilder sb=new StringBuilder();
对于(int i=0;i
StringBuilder sb=新的StringBuilder();
对于(int i=0;i
您有两个问题。首先必须,然后才能调用。首先将十六进制字符串转换为,然后使用
Encoding.ASCII
(或者更好的方法,UTF8)将字节转换为string.System.Text.Encoding.ASCII.GetString(buf);你有两个问题。首先必须,然后才能调用。首先将十六进制字符串转换为,然后使用
Encoding.ASCII
(或者更好的方法,UTF8)将字节转换为string.System.Text.Encoding.ASCII.GetString(buf);您不认为使用
System.Runtime
将十六进制字符串转换为字节数组有点牵强吗?作为你们团队中的一名新程序员,在理解之前我会眨两下眼睛。但对于
Encoding.ASCII
@L.B,快速提问,为什么//见鬼?好吧,但我还有一个问题。如果我有像äöü这样的信件,它们会被“销毁”。有没有办法将这个输入值从ASCII转换为unicode或可以显示特殊字符的东西?我从一个我无法更改的硬件中获取输入字符串。@ElMac它肯定不是ASCII。尝试使用不同的编码,例如
Windows-1252
Windows-1254
等。用法:
Encoding.GetEncoding(“Windows-1252”).GetString(…)
你不认为使用
System.Runtime
将十六进制字符串转换为字节数组有点牵强吗?作为你们团队中的一名新程序员,在理解之前我会眨两下眼睛。但对于
Encoding.ASCII
@L.B,快速提问,为什么//见鬼?好吧,但我还有一个问题。如果我有像äöü这样的信件,它们会被“销毁”。有没有办法将这个输入值从ASCII转换为unicode或可以显示特殊字符的东西?我从一个我无法更改的硬件中获取输入字符串。@ElMac它肯定不是ASCII。尝试使用不同的编码,如
Windows-1252
Windows-1254
等。用法:
Encoding.GetEncoding(“Windows-1252”).GetString(…)
断言()
非常好用,很高兴看到它被简单正确地使用!
Assert()!一个问题:为什么
无符号整数
作为中间类型而不是
字节
?一个问题:为什么
无符号整数
作为中间类型而不是
字节
byte[] HexStringToByteArray(string input) {
  Debug.Assert(input.Length % 2 == 0, "Must have two digits per byte");
  var res = new byte[input.Length/2];

  for (var i = 0; i < input.Length/2; i++) {
    var h = input.Substring(i*2, 2);
    res[i] = Convert.ToByte(h, 16);
  }

  return res;
}
  StringBuilder sb = new StringBuilder();  
  for (int i = 0; i < hexStr.Length; i += 2)
    {
        string hs = hexStr.Substring(i, 2);
        sb.Append(Convert.ToByte(hs, 16));
    }