如何将文本框转换为字节?

时间:2014-01-17 10:34:10

标签: c# memory byte offset

我是C#的新手,所以请光临我。

我有一个文本框,用户可以在其中键入字节;例如,0x01,0x02,0x03。

我希望在此处添加文本框文本;

byte[] offset = new byte[] { **TEXTBOXINPUTHERE** };
Android.SetMemory(0x0248C8FC, offset);

我怎样才能做到这一点?很多例子都是转换文本框输入,这是我不想要的。

感谢您的帮助。

编辑;; 有点难以解释它应该是如此简单...我希望用户向内存地址发送偏移量。因此,如果用户选中该复选框,则会输入具有偏移量的文本框文本。所以而不是

byte[] buffer = new byte[] { 0x60, 0x00, 0x00, 0x00 }; 

我希望它是

byte[] buffer = new byte[] { textbox1.text };

用户输入的值如“0x01”或“0x01,0x60,0x00,0x00”或任何其他值。

1 个答案:

答案 0 :(得分:1)

如果输入始终由前缀为0x的单字节十六进制值组成,用逗号分隔(即"0x01, 0x02, 0x03"),那么您可以执行以下操作:

var input = "0x01, 0x02, 0x03";

// no validation whatsoever
var array = input
    .Split(',')
    .Select(i => i.Trim().Replace("0x", ""))
    .Select(i => Convert.ToByte(i, 16))
    .ToArray();

或者,稍微不那么严格的版本会拆分不同的分隔符(例如逗号,空格,制表符):

private static byte[] GetByteArrayFromHexString(string input)
{
    return input
        .Split(new[] { ',',' ','\t' }, StringSplitOptions.RemoveEmptyEntries)
        .Select(i => i.Trim().Replace("0x", ""))
        .Select(i => Convert.ToByte(i, 16))
        .ToArray();
}

这应该适用于多个不同的输入,这样您的用户就不必输入所有不必要的内容:

// all these variants produce the same output
GetByteArrayFromHexString("0x01, 0x02, 0x03")  // --> new byte[] { 1, 2, 3 }
GetByteArrayFromHexString("0x01 0x02 0x03")    // --> new byte[] { 1, 2, 3 }
GetByteArrayFromHexString("01 02 03")          // --> new byte[] { 1, 2, 3 }