【问题标题】:How to Reduce the size of a speccific format string?如何减小特定格式字符串的大小?
【发布时间】:2013-04-09 22:05:07
【问题描述】:

我为我的项目设计了一个 2 Pass 汇编器。输出为十六进制形式,即 15 为 0F。

我正在使用 ComPort 并通过线路发送“0F”,它应该作为字符串发送。 但问题是我只能在另一端接收 1 个字节和 sizeOf("0F") > 1 byte 。 没有办法在另一端解压缩数据,我需要在我的一端完成所有工作,但我仍然想在另一端接收“0F”。 如果可以,我可以这样做吗?

我这样做是为了得到十六进制字符串:

String.format("{0:X2}",15);

另外,

using System.IO.Ports; 
private SerialPort comPort = new SerialPort(); 
comPort.Write("0F"); 

在接收端,我有一个 8 位处理器,它有一个 1byte * 256 个块,即 256 个字节。接收时的“0F”作为 2 个字节接收,不能存储在 1 个字节的单个块中。所以我希望“0F”为 1 个字节。

【问题讨论】:

  • a) 你如何发送它? b) 接收到哪个字节?
  • 不确定你的意思。 string 中的每个 char 本身就是 两个 字节。如果你只能发送一个字节,也许你只是想要:(byte)15
  • 使用 System.IO.Ports;私有串行端口 comPort = new SerialPort(); comPort.Write("0F");在接收端,我有一个 8 位处理器,它有一个 1byte * 256 个块,即 256 个字节。接收时的“0F”作为 2 个字节接收,不能存储在 1 个字节的单个块中。所以我希望“0F”为 1 个字节。如果仍然不清楚,请随时问我会澄清...
  • @HenkHolterman 请参考上面的评论..
  • @JeppeStigNielsen 请参考上面的评论

标签: c# .net string hex byte


【解决方案1】:

看起来你需要这样的东西:

    // create buffer
    byte[] buffer = new byte[256];

    // put values you need to send to buffer
    buffer[0] = 0x0f;

    // ... add another bytes if you need...

    // send them
    var comPort = new SerialPort();
    comPort.Write(buffer, 0, 1); // 0 is buffer offset, 1 is number of bytes to write

【讨论】:

  • 我使用了你的代码,唯一的问题是接收到的数据是整数形式,即 0F 被接收为 15。
  • 0F == 15。没有问题。
  • 0F == 15 bt 我没有任何机制可以将其改回十六进制。接收端是纯硬件,只能在0F工作,不能在15工作。
  • 十六进制不是硬件,它是一个字符串。 150x0F 只是相同字节值的两种表示法。它们大约是相同的 8 位。
  • 但是硬件上的编码需要十六进制表示法的输入来处理它。
猜你喜欢
  • 2022-01-21
  • 1970-01-01
  • 2019-05-27
  • 2011-05-28
  • 1970-01-01
  • 2015-03-15
  • 2023-04-05
  • 2021-03-27
  • 1970-01-01
相关资源
最近更新 更多