2012-08-02 17 views
1

我有一個字符串,它看起來像這樣:拆分32炭串分成4組的8

str = "751CEC132EB348978013CE7AF8375137" 

它是長32個字符。我想修改它看起來像這樣:

{0x751CEC13,0x2EB34897,0x8013CE7A,0xF8375137} 

我知道,如果我能串分成4組(每組8個字符),我可以很容易地構建使用這些羣體和字符串流所需的字符串。

一個簡單的方法來做到這一點在Python會做到這一點:

'{0x%s,0x%s,0x%s,0x%s}'%(str[0:8],str[8:16], str[16:24], str[24:32]) 

我怎樣才能做到這一點在C++?我對像「sscanf」這樣的低級函數並不是很熟悉,但他們聽起來像可以派上用場。

+1

是「{0x751CEC13,0x2EB34897,0x8013CE7A,0xF8375137}」一個字符串?或一串字符串? – dualed 2012-08-02 14:40:22

回答

8
string strarray[4]; 
strarray[0] = "0x" + str.substr(0, 8); 
strarray[1] = "0x" + str.substr(8, 8); 
strarray[2] = "0x" + str.substr(16, 8); 
strarray[3] = "0x" + str.substr(24, 8); 

如果{0x751CEC13,0x2EB34897,0x8013CE7A,0xF8375137}是整個字符串,然後使用下列行來代替:

ostringstream strm; 
strm << "{" << "0x" << str.substr(0, 8) << ",0x" << str.substr(8, 8) 
      << ",0x" << str.substr(16, 8) << ",0x" << str.substr(24, 8) << "}"; 
str = strm.str(); 
+0

,但在「str ....」前加「0x +」:) – 2012-08-02 14:39:36

+0

對不起,我忘記了,我編輯了我的答案。 – timrau 2012-08-02 14:40:55

+0

哎呀,你打敗了我。刪除我的類似答案。 – 2012-08-02 14:41:44

4

它是在C/C++很相似:

const char* str = "751CEC132EB348978013CE7AF8375137"; 
char parts[4][9]; 
sscanf(str, "%8s%8s%8s%8s", parts[0], parts[1], parts[2], parts[3]); 
char out[64]; 
sprintf(out, "0x%s, 0x%s, 0x%s, 0x%s", parts[0], parts[1], parts[2], parts[3]); 
cout << out << endl; 

Link到ideone實現。

+0

不錯!但爲什麼是17? – 2012-08-02 14:43:06

+0

@KirilKirov你是對的,它應該是九('(32/4)+ 1' ...) – dasblinkenlight 2012-08-02 14:44:30