在其他数组中使用来自 fileGetString 的十六进制值

Using hex-value from fileGetString in other array

我有一个我认为很简单的问题,但不幸的是我自己找不到解决方案。

我在 .txt 文件中有一个包含十六进制数据的数组(例如 0x01 0x02 [...]),我想将此数据用于其他功能。 目的是,使用数组的某些部分(在此示例中数组编号 100)以及不会更改的静态值并向 ECU 发送请求。

当我使用 fileGetString 从文件中读取数据并将其打印到控制台时,它会很好(例如 0x01 0x02 等等)。

当我尝试将它用于您在下面看到的功能时,它没有采用正确的十六进制值(例如 StringLongWrite[100] = 0xFF),但在跟踪数据中只使用“30”。

因此,对于以下示例,发送的请求将是 11 12 13 30 而不是 11 12 13 FF。

有没有简单的方法可以解决这个问题? (最初我得到了我想在 .txt 文件中以“01 02 03 ... FF ...”格式写入的数据,并且已经将其转换为“0x01 0x02 0x03 ... 0xFF ...”数据,只是在如果第一种数据类型更容易使用...)

非常感谢和问候罗伯特

case  1:    /* write memory */
            if(something);

      glbHandleWrite = openFileRead ("test.txt",0);

      if (glbHandleWrite != 0 && fileGetString(StringLongWrite, elcount(StringLongWrite), glbHandleWrite) != 0)
      {
      SendReq[0] = 0x11;
      SendReq[1] = 0x12;
      SendReq[2] = 0x13;
      SendReq[3] = StringLongWrite[100];
      SendRequest(ServicePhys, 4);
      setTimer( TimeOutTimer, TimeOutLong);
      write ("data %s", StringLongWrite);
      break; 
      }

      else write("Data file cannot be opened ");

0x30 是字符 '0'.

的 ASCII 码

您需要将字符串 "0x30" 转换为数字,例如。使用 strtol():

on start
{
  message 0x123 msg;
  char StringLongWrite[32] = "0x01 0x02 0x03";
  long data[2];
  dword pos = 0;

  pos = strtol(StringLongWrite, pos, data[0]);
  pos = strtol(StringLongWrite, pos, data[1]);
  pos = strtol(StringLongWrite, pos, data[2]);

  write("0x%02x,0x%02x,0x%02x", data[0], data[1], data[2]);

  msg.dlc = 8;
  msg.byte(0) = 0x42;
  msg.byte(1) = data[0];
  msg.byte(2) = data[1];
  msg.byte(3) = data[2];

  output(msg);
}