我想我正在寻找的是将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"]
是有效的十六进制。)
答案 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);
}
}
}
}