【问题标题】:How to convert Textbox to Bytes?如何将文本框转换为字节?
【发布时间】:2014-02-06 15:39:46
【问题描述】:

我有一个文本框,用户可以在其中输入字节;例如 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”或任何其他值。

【问题讨论】:

  • 请澄清您的具体问题或添加其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。你想如何将文本转换为字节数组?到目前为止,您尝试过什么?
  • 输入总是这种格式吗? IE。以0x 为前缀的单字节十六进制值,用逗号分隔?
  • 因为用户输入010203 比输入0x01, 0x02, 0x03 容易得多
  • 用户输入的到底是什么? 0x01? 0x01,0x02? x0102 或 xFFFFFFFF 也有效吗?
  • 有时文本框输入为 0x01,有时为 0x60、0x00、0x00、0x00。我希望用户在代码中输入他们自己的偏移量。所以字节只需要是文本框中的值。听起来更容易。

标签: c# memory byte offset


【解决方案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 }

【讨论】:

  • @user3206153:太好了。您还可以考虑允许用户使用空格而不是逗号,就像在第二个示例中一样。如果我使用这样的程序,我可能更喜欢简单地写01 02 03,而不是0x01, 0x02, 0x03
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 2012-06-29
  • 2014-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多