我是新来的,我想做一个程序,把整个句子转换成二进制代码。我有一个主
int main(){
char* text = "Hello, how are you?";
const int len = strlen(text);
bool bytes1[len+1][8];
encode_string(text, bytes1);
for(int j = 0; j <= len; j++){
printf("%c: ", text[j]);
for(int i = 0; i < 8; i++){
printf("%d", bytes1[j][i]);
}
printf("\n");
}
}
函数void encode_string(const char string[], bool bytes[strlen(string)+1][8])
我写了代码,但它给了我一些不清楚的东西。
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <stdbool.h>
void encode_string(const char string[], bool bytes[strlen(string)+1][8]){
int len = strlen(string);
for(int t = len; t <= 0; t--){
printf("%c: ", string[t]);
for(int q = 0; q <= 7; q++){
printf("%d", (q << string[t]) & 1 ? 1 : 0);
}
printf("\n");
}
}
这就是我得到的:
H: 192900192900
e: 192900192900
l: 192900192900
l: 192900192900
o: 192900192900
,: 192900192900
: 192900192900
h: 192900192900
o: 00000000
w: 010064000
: 000064000
a: 02000400
r: 00000000
e: 00000000
: 00000000
y: 00000000
o: 00000000
u: 00000000
?: 00000000
: 164342082441228500
但我不知道为什么
(bytes1 =字节,因为我们正在将其放入encode_string函数)
1条答案
按热度按时间cidc1ykv1#
幸运的是,C语言中的所有变量(包括文本)都已经是二进制形式,所以不需要进行任何转换。我们所要做的就是以任何便于读者阅读的形式显示二进制文件。
例如:
说明:
CHAR_BIT
是写8的学究式方法,因为一些罕见的和外来的系统不一定需要具有8位字节。CHAR_BIT-bit
以屏蔽从MSB开始的位。并且使用CHAR_BIT-bit-1
进行补偿,因为我们希望将位7屏蔽为0,而不是8屏蔽为1。text[i] & bitmask
如果该位被设置,则给出零或非零值。要将其转换为布尔形式,或者更确切地说是值为1或0的整数,将结果与> 0
进行比较,得到1或0。输出量: