将用户输入(以字节格式)转换为字节数组

时间:2018-04-23 04:51:14

标签: c# arrays hex byte

TL; DR

我想我正在寻找的是将string[]转换为byte[],而不实际将string[]的内容转换为字节,因为它们已经是字节。


我有以下代码:

public static bool isHex(String hex) {
    if(hex.Substring(0, 2) == "0x")
        hex = hex.Substring(2, (hex.Length - 2));
    return Regex.IsMatch(hex, @"\A\b[0-9a-fA-F]+\b\Z");
}

static void Main(string[] args) {
    Console.Write("Input bytes: ");
    String input = Console.Readline();

    String[] valueArray = input.Split(new string[] { "\\x" }, StringSplitOptions.None);
    for(int i = 0; i > valueArray.Length; i++)
        if(!isHex(valueArray[i]))
            usage(args[1] + " is not valid hex", 6);
}

获取用户输入,并检查它是否为有效的十六进制。

让我们说用户输入\x00\xff\x12,我想知道如何将其转换为字节数组。

但是,我不想将字符串转换为字节,因为字节在字符串中(\ x 00 \ x ff \ x < strong> 12 ),但我想将这些值插入字节数组中。

我不想将数组元素本身转换为字节(即["00", "FF", "12"]["30", "30", "66", "66", "31", "32"],因为["00", "FF", "12"]是有效的十六进制。)

1 个答案:

答案 0 :(得分:0)

检查一下,我修改了你的代码,你需要的字节数组是byteArray

顺便说一下,你的循环条件是错误的,它应该是i < valueArray.Length

我不确定它是不是你想要的

using System;
using System.Collections.Generic;
using System.Globalization;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Input bytes: ");
            String input = Console.ReadLine();
            String[] valueArray = input.Split(new string[] { "\\x" }, StringSplitOptions.RemoveEmptyEntries);
            List<byte> byteArray = new List<byte>();
            for (int i = 0; i < valueArray.Length; i++) {
                int ret = -1;
                string hex = valueArray[i];
                if (hex.StartsWith("0x"))
                    hex = hex.Substring(2, hex.Length - 2);
                if (!Int32.TryParse(hex, NumberStyles.HexNumber, null, out ret) || ret < 0 || ret > 0xff) {
                    Console.WriteLine("{0} is not valid hex", valueArray[i]);
                    return;
                }
                byteArray.Add((byte)ret);
            }
        }
    }
}