2016-04-07 1 views
1

У меня есть то, что я считаю легким, но, к сожалению, не могу найти решение самостоятельно.Использование hex-значения из файлаGetString в другом массиве

У меня есть массив с шестнадцатеричными данными в .txt-файле (например, 0x01 0x02 [...]) и вы хотите использовать эти данные для другой функции. Назначение - использовать некоторые части массива (в этом примере - номер массива 100) в дополнение к статическим значениям, которые не меняются и отправляют запрос в ECU.

Когда я прочитал данные с fileGetString из файла и распечатал его на консоль, было бы хорошо (например, 0x01 0x02 и т. Д.).

Когда я пытаюсь использовать его для функции, которую вы видите ниже, он не принимает правильное шестнадцатеричное значение (например, StringLongWrite [100] = 0xFF), но в данных трассировки используется только «30».

Таким образом, запрос на запрос будет 11 12 13 30 вместо 11 12 13 FF для приведенного ниже примера.

Есть ли простой способ исправить это? (изначально я получил данные, которые хочу записать в формате «01 02 03 ... FF ...» в .txt-файле, и уже преобразовал это в данные «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 "); 

ответ

1

0x30 является код ASCII для символа '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); 
} 
+0

Спасибо сергей за отзыв, я буду стараться понять и использовать ваше решение. оцените и с наилучшими пожеланиями Роберт – Robertk2016

+0

@ Robertk2016 Добро пожаловать. – sergej

+0

@ Robertk2016 Пожалуйста, дайте мне знать, если это сработает для вас. – sergej