1

次のような文字列があります。

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」のような低レベルの関数にはあまり詳しくありませんが、便利なように聞こえます。

4

2 に答える 2

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();
于 2012-08-02T14:39:01.363 に答える
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;

ideone実装へのリンク。

于 2012-08-02T14:41:39.890 に答える