0

我有2个问题!

第一个问题...

我正在使用 StreamReader 和 WebRequest 从文件中下载字符串。假设我收到了以下信息:

Test=0x01
Stack=0x03
Recv=0x0B

现在,我执行以下操作将它们全部拆分。

var result = Regex.Split(file, "\r\n|\r|\n");

        foreach (string op in result)
        {
            string[] splitop = Regex.Split(op, "=");
            RecvOpcodes.Add(new Opcode(splitop[1], short.Parse(splitop[0])));
        }

操作码接收 String、Short 的参数。例如,第一个是 Test,0x01。

问题是,由于某种原因它无法解析。它说输入字符串的格式不正确,这是为什么呢?

第二个问题。。

我有一个清单。

    public static List<Opcode> SendOpcodes = new List<Opcode>();

Opcode 是 String 的一个类,Short。

 public class Opcode
{
    private string name;
    private short header;

    public Opcode(string nm, short hd)
    {
        name = nm;
        header = hd;
    }
}

现在..我希望能够通过仅使用操作码的名称来获得简短。例如,如果我在该列表中有一个项目:

Migrate 0x0B  (Migrate is the string, 0x0B is the short)

我只想通过使用 Migrate 名称来获取 0x0B,我该怎么做?

谢谢!

4

2 回答 2

3

只需更换

RecvOpcodes.Add(new Opcode(splitop[1], short.Parse(splitop[0])));

RecvOpcodes.Add(new Opcode(splitop[1], Convert.ToInt16(splitop[0],16)));

欲了解更多信息:转换类

于 2013-09-13T09:04:17.073 回答
1

要将十六进制字符串转换为短字符串,可以使用以下重载:

short myShort = Convert.ToInt16(hexString, 16);

这个函数的文档在这里,还有一篇文章在这里处理十六进制和数值之间的转换。

所以你的代码在第一部分应该是这样的:

var result = Regex.Split(file, "\r\n|\r|\n");

foreach (string op in result)
{
    string[] splitop = Regex.Split(op, "=");
    RecvOpcodes.Add(new Opcode(splitop[0], Convert.ToInt16(splitop[1], 16))); // splitop[0] will contain Test, Stack and Recv; splitop[1] will contain 0x01, 0x03, 0x0B
}

Opcode使用 name获取Migrate,您可以添加对System.Linq并使用该.First()方法的引用:

using System.Linq;

.....

public static List<Opcode> SendOpcodes = new List<Opcode>();

.....

SendOpcodes.Add(new Opcode("Migrate", 11));

Opcode desiredOpcode = SendOpcodes.First(opcode => opcode.Name == "Migrate");

如果您不知道Opcode列表中是否存在,您可以使用该FirstOrDefault方法,然后检查是否为 null(用户定义的类的默认值为 null):

Opcode desiredOpcode = SendOpcodes.FirstOrDefault(opcode => opcode.Name == "Migrate");

if (desiredOpcode != null)
{
    // do what you want next in here
}

您可以在此处获得对 Linq 和 lambdas 的介绍,并此处获得对Linq 的一般介绍。

于 2013-09-13T09:09:48.890 回答