【问题标题】:Text box to hex to byte文本框到十六进制到字节
【发布时间】:2013-08-01 16:38:45
【问题描述】:

您好,我有一些文本框,用户可以在其中输入名字、姓氏、...等信息。 我需要将文本框的文本转换为十六进制,然后将十六进制转换为字节并通过 rs232 发送到设备。

我知道通过 rs232 发送部分。我的问题是我只能使用textbox.text.ToString("X"),然后使用以下函数将十六进制转换为字节数组吗?

 public static byte[] StringToByteArray(String hex)
{
  int NumberChars = hex.Length;
  byte[] bytes = new byte[NumberChars / 2];
  for (int i = 0; i < NumberChars; i += 2)
  bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
  return bytes;
 }

【问题讨论】:

  • 编辑您的问题以包含以下内容:鉴于____,我希望____
  • 我读了这篇文章,但我不知道如何使用它们将 string 转换为 hex 。这就是我想做的:例如,如果名字是“John”,我想发送“6A6F686E”。
  • 6A 是小写的 j 顺便说一下,J 在“John”中是 4A
  • 是的,你是对的。我的错误。
  • 那么我该如何解决我的问题呢?

标签: c# hex bytearray


【解决方案1】:

假设 ASCII(基于您的评论):

var bytes = textbox.Text
                   .Select(c => (byte)c)  // cast every character to a byte
                   .ToArray();

当您将chars 视为一组位时,无需转换为十六进制。

将“john”转换为“6A6F686E”字节(仍然觉得将发送的数据加倍很奇怪......):

var bytes = textbox.Text
                   .Select(c => (byte)c)   // to byte
                   .SelectMany(b => b.ToString("X"))  // to hex
                   .Select(c => (byte)c) // to "hex-byte"
                   .ToArray();

【讨论】:

  • 好的。通过这种方式,我假设我不需要声明 byte [] ba = new byte() 并且 var bytes 采用所有字符,尽管 textbox.text 的长度?
  • @user2628363:不需要其他声明,这将创建一个表示文本框中所有字符的数组。如果您需要更少的字符,请在调用 .ToArray() 之前添加 .Take(numberOfChars)
  • 谢谢它可以工作,但字节值是十进制我希望它们是十六进制。我的意思是'h'它给我 104 但我想要 68
  • @user2628363:所以你需要发送字符串字符的十六进制值的字节表示?或者,你需要发送字符串的字节表示吗?
  • 我正在为其开发软件的设备假定我以十六进制格式发送信息。但由于它是一个设备,我需要将十六进制值放在一个字节数组中并发送到设备。如前所述,如果名称是“john”,我应该将“6A6F686E”发送到设备,但作为字节数组
猜你喜欢
  • 2017-09-13
  • 2015-08-08
  • 2023-03-14
  • 2011-01-30
  • 2014-02-07
  • 2012-01-24
  • 2012-10-20
  • 1970-01-01
相关资源
最近更新 更多