在其他数组中使用来自 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);
}
我有一个我认为很简单的问题,但不幸的是我自己找不到解决方案。
我在 .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'
.
您需要将字符串 "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);
}