我有 1 和 0 的 int 数组,例如-
01101000
01100101
01101100
01101100
01101111
这是“你好”的位转换。我想将其转换回字符数组,例如-
01101000 -> h
01100101 -> e
01101100 -> l
01101100 -> l
01101111 -> o
你们能给出相同的C++代码片段吗?
我有 1 和 0 的 int 数组,例如-
01101000
01100101
01101100
01101100
01101111
这是“你好”的位转换。我想将其转换回字符数组,例如-
01101000 -> h
01100101 -> e
01101100 -> l
01101100 -> l
01101111 -> o
你们能给出相同的C++代码片段吗?
您可以定义一个函数,如:
char bitsToChar(const char *bits)
{
char result = 0;
for (int i = 0; i < 8; i++)
{
result = (result << 1) | bits[i];
}
return result;
}
在每个循环中,下一位附加到存储结果的右侧,将先前添加的位“推”到左侧。
所以这段代码:
#include <iostream>
using namespace std;
char bits[5][8] = {
{0,1,1,0,1,0,0,0},
{0,1,1,0,0,1,0,1},
{0,1,1,0,1,1,0,0},
{0,1,1,0,1,1,0,0},
{0,1,1,0,1,1,1,1} };
char bitsToChar(const char *bits)
{
char result = 0;
for (int i = 0; i < 8; i++)
{
result = (result << 1) | bits[i];
}
return result;
}
int main(const char* argv[], const int argc)
{
for (int j = 0; j < 5; j++)
{
for (int i = 0; i < 8; i++)
{
cout << (int)bits[j][i];
}
cout << " -> " << bitsToChar(bits[j]) << endl;
}
}
产生以下输出:
01101000 -> h
01100101 -> e
01101100 -> l
01101100 -> l
01101111 -> o
数组中的每一个都int
应该根据它在数组中的位置左移(例如,最右边int
的值左移 0,最左边的值左移 7),然后添加到跟踪和。遍历数组并保留位移值的总和。
假设您总是要使用 8 的数组ints
:
int bits[8] = {0,1,1,0,1,0,0,0};
char c = 0;
for (int i=0; i<8; i++) {
c += bits[i]<<(7-i);
}
我会给你一个线索,因为这似乎是家庭作业。
您可以int
通过在遍历数组时有条件地添加来生成二进制文件。int
可以将an强制转换为 achar
以返回一个字母。
例如在基数 3 中:
10212 : h
21121 : e
.
.
.
const int length_of_word = 5;
const int length_of_letter = 5;
char* word = new char[length_of_word];
for (int letter = 0; letter < length_of_word; letter ++)
{
int accumulator = 0;
for (int trinaryIndex = 0; trinaryIndex < length_of_letter; trinaryIndex ++)
{
int curVal = 1;
if (trinaryArray[letter][trinaryIndex] > 0)
{
accumulator += curVal * trinaryArray[letter][trinaryIndex];
}
curVal *= 3;
}
word[letter] = (char)accumulator;
}
编辑:这不考虑 MSB 或 LSB 排序。您可能需要更改内部循环的顺序以解决此问题;)。