2017-02-03 2 views
0

Вот суть текстового файла, содержащего биты упаковываются в блоки 4:Как читать или интерпретировать шестнадцатеричные данные?

https://gist.github.com/ukudala/f532809ce7de4f5599bad5c3b61eae9a

И здесь первые 20 строк:

6f5e 0000 4c18 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 5645 5253 494f 4e20 3152 554c 4543 5452 4c04 000f 0000 0000 0000 0000 0005 001e 003c 005a 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0047 414d 4543 5452 4c54 544f 5753 4f4e 2020 0023 3520 546f 7773 6f6e 2020 2020 2020 2020 2020 2000 4d4d 4152 594c 414e 4400 4d61 7279 6c61 6e64 2020 2020 2020 2020 2020 2020 0032 2d31 2020 2020 2020 2020 2020 2020 2020 2020 2000 332d 3120 2020 2020 2020 2020 2020 2020 2020 2020 0032 2d31 2020 2020 2020 2020 2020 2020 2020 2020 2000 332d 3120 2020 2020 2020 2020 2020 2020 2020 2020 0005 0019 0000 0000 000b 0000 0000 0004 0000 0000 0004 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

Как бы я интерполировать это шестнадцатеричные данные в, например, файл XML?

Это показание статистики спортивных соревнований. Я ожидаю, что там будет по существу пять разделов: два набора реестров, игра по игре и два набора статистических данных. Любая идея, как я могу экстраполировать эту информацию из этих данных?


Update // Edit:

Найдено этот классный сайт, который преобразует шестнадцатеричное к тексту:

http://www.unit-conversion.info/texttools/hexadecimal/

+1

Соответствующее содержание вашего вопроса должно быть здесь, в самом вопросе, а не по внешней ссылке. Если эта ссылка недоступна по какой-либо причине (перемещена, удалена, отключена и т. Д.), Ваш пост не имеет значения для будущих пользователей этого сайта (что делает его неприемлемым для публикации здесь). Пожалуйста, отредактируйте, чтобы включить * минимальное количество этого контента *, необходимое для того, чтобы ваш вопрос стоял сам по себе; вы можете включить ссылку за пределы участка в качестве дополнительной ссылки, но необходимый контент должен быть здесь. Благодарю. –

+0

Вы фантазируете, что можете магически преобразовать эти двоичные данные в читаемый текст. Этого не произойдет. Первое вы отправили ASCII '^ o' (или' o^', в зависимости от порядка байтов), за которым следует пара нулевых символов. Или это значение Unicode. Или это какой-то волшебный знак, который автор использовал в качестве индикатора версии. Или что-то еще. Все пары '00' - это NULL, а все значения' 20' - это ASCII-пробелы. Прочитайте их byte by byte и конвертируйте в ASCII, чтобы узнать, имеет ли смысл, или обратитесь к автору данных и спросите их, как экстраполировать на читаемый контент. –

+0

Кен Я ценю ваш комментарий, но я сопротивляюсь твоему вкладу обо мне, фантазируя об этом. Все, что нужно было, было использовать шестнадцатеричный текст, и все получилось очень хорошо. Теперь вопрос заключается в том, как создать свою собственную версию с той же структурой. – ukudala

ответ

0

Он имеет информацию, как это в нем ..

GAMECTRLTTOWSON # 5 Towson MMARYLAND Maryland 2-1

Замечания, приведенные выше, чрезвычайно актуальны. Я бы пересмотрел этот подход. Следующий код показывает вам данные, но это противоположность тому, что я бы рекомендовал. Большая часть этой функциональности фактически похожа на платформу .NET. Я закодировал ее, чтобы вы могли подумать о реальном решении, помимо синтаксического анализа шестнадцатеричной строки в качестве данных.

Если у вас был доступ к данным непосредственно перед этим шестнадцатеричным текстом, когда был выписан текстовый файл, вы были бы в лучшей форме.

public void ExampleTest1() 
{ 

    string hexString = "6f5e 0000 4c18 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 5645 5253 494f 4e20 3152 554c 4543 5452 4c04 000f 0000 0000 0000 0000 0005 001e 003c 005a 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0047 414d 4543 5452 4c54 544f 5753 4f4e 2020 0023 3520 546f 7773 6f6e 2020 2020 2020 2020 2020 2000 4d4d 4152 594c 414e 4400 4d61 7279 6c61 6e64 2020 2020 2020 2020 2020 2020 0032 2d31 2020 2020 2020 2020 2020 2020 2020 2020 2000 332d 3120 2020 2020 2020 2020 2020 2020 2020 2020 0032 2d31 2020 2020 2020 2020 2020 2020 2020 2020 2000 332d 3120 2020 2020 2020 2020 2020 2020 2020 2020 0005 0019 0000 0000 000b 0000 0000 0004 0000 0000 0004 0000 0000"; 

    string strFromHexStr = FxByteArrayFromHexString(hexString); 

    System.Diagnostics.Debug.WriteLine(strFromHexStr); 

    // something like ... 
    // GAMECTRLTTOWSON #5 Towson   MMARYLAND Maryland    2-1 

} 


string FxByteArrayFromHexString(string HexLikeStringIn) 
{ 
    string retFianl = string.Empty; 
    StringBuilder sbWork = new StringBuilder(string.Empty); 
    char[] chrArrayFromHexString = null; 
    char chrA = ' '; 
    char chrB = ' '; 
    bool readFront = true; 
    byte curByt = 0; 
    string tmpStr = string.Empty; 
    bool hexChar = false; 
    Int32 twoDigitHexAsNumber = 0; 

    try 
    { 
     chrArrayFromHexString = HexLikeStringIn.ToCharArray(); 

     foreach(char curChr in chrArrayFromHexString) 
     { 
      // accumlate in chunks of two 

      hexChar = false;    
      twoDigitHexAsNumber = (-1); 

      curByt = Convert.ToByte(curChr); 

      if ((curByt >= 48) && (curByt <= 57)) // between "0" and "9" as strings 
      { 
       hexChar = true; 
      } 
      else if ((curByt >= 97) && (curByt <= 102)) // hex letters small "a" to "f" 
      { 
       hexChar = true; 
      } 
      else if ((curByt >= 65) && (curByt <= 70)) // hex letters upper "A" to "F" 
      { 
       hexChar = true; 
      } 
      else 
      { 
       // not a hex letter       
      } 

      if (hexChar) 
      { 
       if (readFront) 
       { 
        readFront = false; 
        chrA = curChr; 
       } 
       else 
       { 
        readFront = true; 
        chrB = curChr; 

        if ((chrA != ' ') && (chrB != ' ')) 
        { 
         try 
         { 
          twoDigitHexAsNumber = Int32.Parse(chrA.ToString() + chrB.ToString(), System.Globalization.NumberStyles.HexNumber); 
         } 
         catch (Exception exHxParse) 
         { 

         } 
        } 

        // twoDigitHexAsNumber might have our parse - start over on the two digit accumulation 
        readFront = true; 
        chrA = ' '; 
        chrB = ' '; 
       } 
      } 
      else 
      { 
       //reset both charcters we are tracking 
       readFront = true; 
       chrA = ' '; 
       chrB = ' '; 
      } 


      if (twoDigitHexAsNumber >= 0) 
      { 
       //read in a two digit hex number and converted it to decimal 
       //get the ascii value for this decimal as a character 

       if ((twoDigitHexAsNumber >= 32) && (twoDigitHexAsNumber <= 126)) 
       { 
        //normal character 
        sbWork.Append(Convert.ToChar(twoDigitHexAsNumber)); 
       } 
       else 
       { 
        // crlf or other relavent control characters 
        sbWork.Append(' '); 
       } 
      } 

     } //for each loop 

     // sbWork now has a strign representation 
    } 
    catch (Exception ex) 
    { 
     System.Diagnostics.Debug.WriteLine(ex.ToString()); 
    } 

    return sbWork.ToString(); 
} 
Смежные вопросы