C# 将十六进制字符串转换为字节数组?

C# 将十六进制字符串转换为字节数组?,c#,C#,我不知道该怎么办。我只是想要这个十六进制字符串: string hash = "4A|DA|6C|A9|C2|D5|71|EF|6E|2A|8C|C3|C9|4D|36|B9" splitRHash2 = splitRHash.Split('|'); foreach (string i in splitRHash2) { //BYTEARRAY += Convert.ToByte(Convert.ToInt32(i, 16))??? } 转换为包含16个字节的字节数组。这将极大地帮助我

我不知道该怎么办。我只是想要这个十六进制字符串:

string hash = "4A|DA|6C|A9|C2|D5|71|EF|6E|2A|8C|C3|C9|4D|36|B9"
splitRHash2 = splitRHash.Split('|');
foreach (string i in splitRHash2)
{
    //BYTEARRAY += Convert.ToByte(Convert.ToInt32(i, 16))???
}
转换为包含16个字节的字节数组。这将极大地帮助我从“散列”中调用这些值,并在以后的项目中使用它添加轮键。问题是,我不知道如何在不使用.split方法的情况下以2的增量获取字符串。
有什么想法吗?谢谢

只需使用LINQ将拆分的字符串转换为字节,然后再转换为数组。代码如下:

4ADA6CA9C2D571EF6E2A8CC3C94D36B9

你在说这样的事吗

string hash = "4A|DA|6C|A9|C2|D5|71|EF|6E|2A|8C|C3|C9|4D|36|B9";
string[] splittedHash = hash.Split('|');
byte[] byteHash = splittedHash.Select(b => Convert.ToByte(b, 16)).ToArray();
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
名称空间控制台
{
班级计划
{
静态void Main(字符串[]参数)
{
var str=“4ADA6CA9C2D571EF6E2A8CC3C94D36B9”;
var result=Partition(str,2).ToArray();
}
公共静态IEnumerable分区(字符串str,int partSize)
{
如果(str==null)抛出新的ArgumentNullException();
if(partSize<1)抛出新ArgumentOutOfRangeException();
var sb=新的StringBuilder(零件尺寸);
对于(int i=0;i
您可以只使用基本数据结构和O(n)时间来制作解决方案,就像这样

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApp
{
    class Program
    {
        static void Main (string[] args)
        {
            var str = "4ADA6CA9C2D571EF6E2A8CC3C94D36B9";

            var result = Partition (str, 2).ToArray ();
        }

        public static IEnumerable<string> Partition (string str, int partSize)
        {
            if (str == null) throw new ArgumentNullException ();
            if (partSize < 1) throw new ArgumentOutOfRangeException ();

            var sb = new StringBuilder (partSize);

            for (int i = 0; i < str.Length; i++) 
            {
                sb.Append (str[i]);

                bool isLastChar = i == str.Length - 1;

                if (sb.Length == partSize || isLastChar)
                {
                    yield return sb.ToString ();
                    sb.Clear ();
                }
            }
        }
    }
}

你想删除“|”?谢谢这太棒了!我真的不想绝对避免使用.split(),在这种情况下,这是一种非常干净的方法。
string hash = "4A|DA|6C|A9|C2|D5|71|EF|6E|2A|8C|C3|C9|4D|36|B9";
byte[] result = new byte[16];

int i = 0;
int j = 0;
while(i < hash.Length)
{
    byte value = (byte)(HexCharToByte(hash[i]) * 16 + HexCharToByte(hash[i + 1]));
    result[j] = value;
    i += 3;
    j++;
}
static byte HexCharToByte(char c)
{
    HashSet<char> NumSet = new HashSet<char>( new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'} );
    HashSet<char> CharSet = new HashSet<char>( new char[] { 'A', 'B', 'C', 'D', 'E', 'F' } );

    if (NumSet.Contains(c))
    {
        return (byte)(c - '0');
    }
    else if (CharSet.Contains(c))
    {
        return (byte)(c - 'A' + 10);
    }

    throw new InvalidArgumentException("c");
}