2012-05-31 68 views
0

這裏我有一個文件testdec.txt。 在此文件內容如下所示。將文件內容轉換爲十六進制格式

N = 162,27,79,83,101,69,213,78,188,215,254,75,222,74,204,124,53,108,240,157,213,109,189,143,226,71,120,134,57,27,64,230,126,218,4,249,150,44,182,223,70,241,96,113,61,115,54,13,209,53,236,157,164,126,202,150,121,13,180,223,50,84,239,39,188,44,119,71,50,220,196,107,218,66,106,24,203,13,150,135,231,65,240,236,32,226,166,2,243,26,236,253,185,88,196,58,255,146,93,202,57,219,57,160,62,160,225,167,0,209,231,110,156,106,8,119,47,255,46,87,76,10,243,99,48,147,47,197 
E = 1,0,1 

在這裏,我想N and E值爲十六進制格式轉換,並希望寫的十六進制值的兩個字節每個十進制值與出comma分離。我想在另一個testhex.txt文件中寫入這個十六進制值。

如果十進制值僅爲十六進制的一個字節,那麼我還必須在該十六進制值的前面添加0。 你可以在E的東西中看到這個東西。'

我想在其他文件或同一文件中做這些事情。可能在另一個文件是可能的。我們不能在同一個文件中完成。

我要像

N = A21B4F536545D54EBCD7FE4BDE4ACC7C356CF09DD56DBD8FE2477886391B40E67EDA04F9962CB6DF46F160713D73360DD135EC9DA47ECA96790DB4DF3254EF27BC2C774732DCC46BDA426A18CB0D9687E741F0EC20E2A602F31AECFDB958C43AFF925DCA39DB39A03EA0E1A700D1E76E9C6A08772FFF2E574C0AF36330932FC5 
E = 010001 

所以,我怎樣才能實現這個目標又testhex.txt文件輸出文件。請給我關於這個的建議。

編輯:試試這個testdec.txt還按照BLUEPIXY代碼,它在無限循環中消失。

N = 137,72,247,73,196,168,11,223,107,232,230,189,125,211,175,123,12,235,2,231,123,244,84,184,214,143,144,189,38,103,237,173,129,68,158,92,8,141,76,60,76,98,54,39,7,48,148,45,76,105,52,191,255,245,117,156,25,122,244,65,79,110,244,17,23,110,128,239,117,70,46,140,178,75,230,126,242,100,77,194,42,187,241,110,218,215,242,118,186,92,133,26,175,167,158,16,113,123,105,114,161,23,79,197,76,102,103,93,230,174,120,128,194,34,104,42,253,131,122,49,30,212,205,237,119,71,108,95 
E = 1,0,1 
N = 137,72,247,73,196,168,18,223,107,232,230,189,125,211,175,123,12,235,2,231,123,244,84,184,214,143,144,189,38,103,237,173,129,68,158,92,8,141,76,60,76,98,54,39,7,48,148,45,76,105,52,191,255,245,117,156,25,122,244,65,79,110,244,17,23,110,128,239,117,70,46,140,178,75,230,126,242,100,77,194,42,187,241,110,218,215,242,118,186,92,133,26,175,167,158,16,113,123,105,114,161,23,79,197,76,102,103,93,230,174,120,128,194,34,104,42,253,131,122,49,30,212,205,237,119,71,108,95 
E = 1,0,1 
+4

[你嘗試過什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+0

@KarolyHorvath在這裏,我我正在尋找方式,我該如何做到這一點?我也對此做了一些編碼。但我想在N和E之後只讀取值,所以我該如何做到這一點。在這裏,我使用了strtok來分隔字節。 – user1089679

回答

0

你試過:

  • man fgets,這從文件中讀取行。
  • man strtok,這會提取由分隔符分隔的數據。
  • man atoi,這將字符串轉換爲int。
  • man fprintf,這將int值作爲十六進制字符串寫入文件。
+0

如何在E和N之後獲得價值? – user1089679

+0

使用空格作爲分隔符來獲取整個整數列表,然後使用逗號提取每個值。 – mouviciel

+0

strtok給出定界符的先前值(值之前)。假設如果我將應用strtok然後我只得到N =,我想N =值後 – user1089679

1

一個樣品

#include <stdio.h> 

int main(){ 
    FILE *fin,*fout; 
    char ch1,ch2; 
    int data; 

    fin=fopen("testdec.txt", "r"); 
    fout=fopen("testhex.txt", "w"); 
    while(1){ 
     if(EOF==fscanf(fin, "%c %c ", &ch1, &ch2)) 
      break; 
     fprintf(fout, "%c %c ", ch1, ch2); 
     while(EOF!=fscanf(fin, "%d%c%*[ \n]", &data, &ch1)){ 
      fprintf(fout, "%02X", data); 
      if(ch1 == ',') continue; 
      if(ch1 == '\n' || ch1 == ' '){ 
       fprintf(fout, "\n"); 
       break; 
      } 
     } 
    } 
    fclose(fout);fclose(fin); 
    return 0; 
} 
+0

'fscanf(「%d%c」,...)'如果數據中存在字母字符或放錯位置的逗號,則可能返回0;最好在內部循環中使用'while(fscanf(「%d%c」,&data,&ch1)== 2)'作爲測試。 –

+0

這樣的user1089679會檢查是否有必要。 – BLUEPIXY

+0

這個程序只適用於兩行,如果我會放更多的行,然後它會無限循環。 – user1089679