C# 十六进制到字节数组循环

我有以下功能:


    public void SetTagData(string _data)

    {

        string data = _data;


        byte[] ba = Encoding.Default.GetBytes(data);

        string hexString = BitConverter.ToString(ba);

        hexString = hexString.Replace("-", "");


        var blockStart = 0;

        var bufferHexBlocks = String.Empty;


        try

        {

            for (var i = 0; i < hexString.Length; i++)

            {

                var byteList = new List<byte>();

                byte[] datablockKey = ConvertHelpers.ConvertHexStringToByteArray(i.ToString().PadLeft(2, '0'));

                var block = hexString.Substring(blockStart, 8);

                byte[] datablockValue = ConvertHelpers.ConvertHexStringToByteArray(block);

                byteList.AddRange(datablockKey);

                byteList.AddRange(datablockValue);


                _reader.Protocol("wb", byteList.ToArray());

                blockStart += 8;

            }

        }

        catch (Exception ex)

        {

          console.log(ex.message);

        }

    }

传入的数据是一堆十六进制字符串。我需要将此十六进制字符串拆分为 8 个字符的批次,从00to附加一个递增的 0 填充十六进制数1f,并将此新字符串作为字节数组发送到_reader.Protocol函数,该函数接受一个字符串wb作为第一个参数,将块作为第二个参数。


例如传入的数据是:


string data = "3930313B36313B5350542D53504C3B3830303B3B352E373B3B303B303B3B3B34353036383B4E3B4E3B"

我需要将以下内容发送到_reader.Protocol对象:(增量填充的十六进制01, 02, 03, ... , 0f)和数据字符串的前 8 个字符,然后是下一个,依此类推作为字节数组。 [013930313B],[0236313B53]等等。


我想我已经接近了……但错过了一些东西……


我目前的问题是我不知道如何在 8 个块中循环,如果十六进制字符串是 82 个字符而不是 80 个(8 的倍数),那么我将如何获取最后两个字符而不会得到一个IndexOutofRange 异常。


注意:这是针对 Windows CE 应用程序的,因此请不要使用新的 C# 功能。


MM们
浏览 256回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP