2011-08-30 122 views
2

我得到了非常非常長的數據包,它們被記錄到文本文件中。但有些我必須檢查錯誤。 示例(非常短的一個):字符串到字節數組

863900004400003708F72E0000003F2F0000001E2F0000008A2F000000632F000000AE2F000000D42A0000009323000000050000E7FD0700A861006087447E6F02C200608844359D0101A8613B04E0FF43040100009A999941010070420000C842000C005F5F5FC1EEF0FBE6EAE05F5F01020000000000000C00C3F0F3EFEFE05FD0E8F1EAE000FFDE070000B5000000A861661675447F6F02C2294C7744B540000100B54001000000000000000000000000C8420002020103DD07000026010000A861333375447F6F02C252487744B540000100B54001000000000000000000000000C84200020201037E0700002000012D043B0E0000003C0E0000003D0E000000320E000000050000C0C20500A861549B72447E6F02C28FF9AA44CEA9000100CEA901000000008041000048420000C842000900EBF3EAE0F15FEBF2F300010000000000000C00C1EEE3E85F5FD1ECE5F0F2E8D21000000000000000000000000000000000010000FF2E08000007000000A86100C09C440000C0C000C0AB440000 

我需要想插入的應用的「 0X」其間的每一個字節,這樣我可以在以後把它聲明爲靜態數組。

問題是,如果我將它作爲字符串添加,編譯器會給出錯誤,因爲字符串太長。出於這個原因,如果你能幫我用C/C++,C#或Delphi之一的語言來做這件事,我會很好。

+1

什麼代碼?什麼錯誤? –

+0

你目前使用哪種語言?另外,如果您有錯誤,請張貼代碼。我猜你正在使用一種不可變的數據類型,所以試圖調整它的大小是行不通的。您可能必須分配一個新陣列,並在將數據包移動到新陣列時添加「0x」。\ – mydogisbox

+0

文本編輯器如何?查找'([0-9] {8})',替換爲'0x \ 1'。 –

回答

5

您可以使用C#使用您的字符串轉換爲字節數組:

byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(yourString); 
2

C#:

// get entire string 
var contents = File.ReadAllText("filename.txt"); 
// convert every 2 digits 'AA' into ',0xAA' 
contents = Regex.Replace(contents, "..", ",0x$0").Trim(','); 
// output to another file 
File.WriteAllText("filename2.txt"); 
+0

+1因爲使用正則表達式替換...無價:-) – xanatos

+0

這是最簡單的方法,我非常確定OP不要求UTF8.GetBytes - 原始文件已經在字節值中。他試圖將其轉換爲可以複製到代碼文件中的格式。 – Jimmy

0

在C:

#include <stdio.h> 

int main(int argc, char* argv[]) 
{ 
    int ch; 
    while ((ch = getc(stdin)) != EOF) { 
     if (isprint(ch)) { 
      if (! isspace(ch)) { 
       printf("0x%c", ch); 
      } else { 
       printf("[0x%X]", ch); 
      } 
     } 
    } 
    return 0; 
} 

要調用:

Windows:

type filename | program.exe 

的Unix:

cat filename | ./program 

沒有爲空格,製表符,換行符和回車,因爲你難免會遇到他們在你的努力有區別的。