2017-08-07 121 views
-5

由于某些原因,我需要经常生成字符串,使用{'0','1','2','3'}中的字符。我当前的代码使用的push_back()函数,看起来像:C++如何用二进制格式表示字符串?

string test = "" 
test.push_back('0') 
test.push_back('2') 
test.push_back('3') // test would be "023" 

我想存储在一个char类型或者int类型的字符串,并使用每个字符的二进制形式递归生成的字符串。 “023”将被存储在char ='0010 1100'中。

您认为二进制操作比push_back更省时吗?如果是这样,如何编写代码。

谢谢!

+1

你怎么能区分'10'从'101',或任何其他共享前缀的二进制字符串? – Purag

+1

为什么在将数字的二进制表示形式添加为字符串与将数字添加为字符串之间会存在性能差异?无论哪种情况,您都在进行字符串连接,字符串不知道某个字符是“二进制”,因为它们只是字符' – CoryKramer

+0

@Prag字符每个字符都将由2位完全表示。 – user2566640

回答

-2

使字符串像string s="0123"。 而且,使用next_permutation(s.begin(),s.end())来产生由0,1,2,3组成的所有数字排列。

+0

OP意味着他想要的字符串是可变长度的。这只会产生固定长度的字符串。 – hnefatl

1

您可以使用位域,像

struct data 
{ 
    unsigned char v1 : 2; // Can only store 0, 1, 2, 3 
    unsigned char v2 : 2; 
    unsigned char v3 : 2; 
    unsigned char v4 : 2; 
}; 

然后用

std::vector<data> v; 
int nd_elem_in_last_item = 0; // to differenciate 00 from 0 and not there for final item. 

所以你的数据确实是更紧凑。

相关问题