【问题标题】:Binary to Ascii and back again二进制到 Ascii 并再次返回
【发布时间】:2011-02-20 14:17:24
【问题描述】:

我正在尝试通过串行端口与硬件设备交互。当我使用像 Portmon 这样的软件来查看消息时,它们看起来像这样:

42 21 21 21 21 41 45 21 26 21 29 21 26 59 5F 41 30 21 2B 21 27
42 21 21 21 21 41 47 21 27 21 28 21 27 59 5D 41 32 21 2A 21 28  

当我通过十六进制到 ascii 转换器运行它们时,这些命令没有意义。这些消息实际上与十六进制不同吗?我希望看到设备传递的消息并使用 c# 模拟它们。我该怎么做才能准确了解这些消息是什么?

【问题讨论】:

  • 为什么你认为这些消息是 ASCII 编码的字符串?这实际上可以是任何数据,例如一个 32 位无符号整数,后跟一个 16 位有符号整数,然后是一个字节,然后是...
  • 您是否也配置了端口读取器,BuadRate、停止位、数据位 f 有时会从设备中得到无意义的结果

标签: c# binary serial-port ascii hex


【解决方案1】:

设备正在向计算机发送数据。所有的数字数据都有1和0的形式,比如10101001010110010...。大多数情况下,将一组八个这样的位(二进制数字)组合成字节,因此所有数据都由字节组成。因此,一个字节可以表示 2^8 值 0 到 2^8 - 1 = 255 中的任何一个,或者,在十六进制表示法中,可以表示任何数字 0x00 到 0xFF。

有时字节代表一串字母数字(和其他)字符,通常是 ASCII 编码的。这种数据格式为从 0 到 127 的每个值分配一个字符。但所有数据都不是 ASCII 编码的字符。

例如,如果设备是光强度传感器,则每个字节都可以将光强度表示为 0(漆黑)和 255(尽可能亮)之间的数字。或者,数据可以是位图图像。然后数据将从几个定义明确的结构(即thisthis)开始,指定颜色深度(每个像素的位数,即或多或少的颜色数)、宽度、高度、以及位图的压缩。然后像素数据将开始。通常字节会去 BBGGRRBBGGRRBBGGRR 其中第一个 BB 是第一个像素的蓝色强度,第一个 GG 是第一个像素的绿色强度,第一个 RR 是第一个像素的红色强度,第二个 BB 是蓝色强度第二个像素,以此类推。

事实上,数据可能意味着任何事情。它是什么类型的设备?它有一个开放的规范吗?

【讨论】:

    【解决方案2】:

    硬件设备是否指定了协议?仅仅因为它是一个串行端口连接并不意味着它必须是 ASCII/可读英文文本。它也可以只是一个字节序列,例如 42 是命令,21212121 是该命令的数据。可以是初始化序列或其他。

    归根结底,您使用的只是一系列字节。它们的含义可以在协议规范中找到,或者如果您没有,则需要手动查看每个命令。向设备发出命令,捕获输入,发出另一个命令。

    寻找模式。通用初始化?可能是什么命令?传递了哪些数据?

    是的,这很乏味,但逆向工程并不容易。

    十六进制的 ASCII 是这样的:

    B!!!!AE!&!)!&Y_A0!+!'
    B!!!!AG!'!(!'Y]A2!*!(

    在我看来,这确实像是某种协议,带有一些初始化序列 (B!!!!) 和命令(AE 和 AG),但这只是猜测。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      • 2012-02-05
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-02
      相关资源
      最近更新 更多