2016-04-07 16 views
1

我有一個我認爲簡單的問題,但很遺憾,找不到解決方案。在其他數組中使用fileGetString的十六進制值

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

回答

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

相關問題