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

Arrays 在其他数组中使用fileGetString中的十六进制值,arrays,capl,Arrays,Capl,我有一个我认为很简单的问题,但不幸的是我自己找不到解决办法 我在.txt文件中有一个包含十六进制数据的数组(例如0x01 0x02[…]),希望将此数据用于另一个函数。 目的是,除了不改变的静态值之外,使用数组的某些部分(在本例中为数组编号100),并向ECU发送请求 当我从文件中读取带有fileGetString的数据并将其打印到控制台时,一切正常(比如0x01 0x02等等) 当我尝试将其用于下面的函数时,它不采用正确的十六进制值(例如StringLongWrite[100]=0xFF),但

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

我在.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()


谢谢你的反馈,我会尽力理解并使用你的解决方案。感谢并致以最良好的问候Robert您的解决方案正在发挥作用!如果我有更多的声誉,我当然会投更高的票;)非常感谢你!你好,sergej,谢谢你的提示,现在我可以向上投票了:p我还有一个问题:如果我想在Stringlongwrite中定义元素[X]以使用strtol命令进行转换(例如,30,31,…),我是否必须定义一个完整的“数据”数组直到最后使用的值?pos=strtol(Stringlongwrite,pos,data[30]);pos=strtol(StringLongWrite,pos,数据[31]);rqBuf[0]=0x3D。。。rqBuf[6]=0x0A;rqBuf[7]=数据[30];rqBuf[8]=数据[31];但是它只从[0,1,…等等]中提取Stringlongwrite中的元素,而不是[30,31等等]
dword pos=4*30
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);
}