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 回答