Example
注意:我只关心字母。所以位集 000001 是a
or A
.
我有一个string
named s
与价值"abc"
。
我把每一个char
of the string
并将其转换为二进制值通过
指某东西的用途bitset
.
e.g
bitset <6> b1 = s[0]; //a
bitset <6> b2 = s[1]; //b
bitset <6> b3 = s[2]; //c
然后我想将结果放入array
of strings
。数组的名称是arr
(以及每个string
of the array
将代表每个的二进制值char
)
e.g
arr[0] //will hold the value of char 'a' in binary form which is 000001
arr[1] //will hold the value of char 'b' in binary form which is 000010
arr[2] //will hold the value of char 'c' in binary form which is 000011
以及我转换每个的方式char
来自string
到二进制是
arr[0] = b1.to_string(); //arr[0] is now 000001
arr[1] = b2.to_string(); //arr[1] is now 000010
arr[2] = b3.to_string(); //arr[2] is now 000011
现在我的问题就在这里。
我如何将它们转换回char
?
e.g.
//I want each char to take back the each corresponding letter from the binary values
char c1; //How do i make the arr[0] value of 000001 to become 'a' again?
char c2; //Same here
char c3; //And here
假设您想从 ASCII 代码 64 开始,并且'a'
(or 'A'
) 简单来说就是000001
在这种情况下,那么你可以简单地做
c1 = static_cast<char>(std::bitset<6>(arr[0]).to_ulong() + 64); //
'A'
十进制表示为65
,二进制表示为0b01000001
. 'a'
十进制表示为97
,二进制表示为0b01100001
。在您的代码中,您使用bitset<6>
储藏'a'
(or 'A'
). A bitset<6>
只能代表2^6
符号,即64
,所以你会遇到切割。基本上是2
最重要的位将被削减。在这种情况下,bitset<6>('A')
变成0b000001
, i.e. 1
以十进制表示,并且bitset<6>('a')
变成0b1000001
, i.e. 33
以十进制表示。您现在可以说服自己重新添加64
产生正确的结果。
EDIT
请注意,您还可以使用std::stoi http://en.cppreference.com/w/cpp/string/basic_string/stol(仅限 C++11)将位字符串从基数 2 转换为十进制,如其他答案中所述:
char c1 = static_cast<char>(std::stoi(arr[0], nullptr, 2) + 64);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)