已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。
2天前关闭。
Improve this question
#include <cs50.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const int BYTE = 8;
void print_bulb(int bit);
int main(void)
{
string message = get_string("message: ");
int v = 0;
for (int i = 0, len = strlen(message); i < len; i++)
{
int bits[BYTE];
v = message[i];
for (int j = 0; j < 8; j++)
{
bits[j] = v % 2;
printf("%i\n" , bits[j]);
}
}
}
void print_bulb(int bit)
{
if (bit == 0)
{
// Dark emoji
printf("\U000026AB");
}
else if (bit == 1)
{
// Light emoji
printf("\U0001F7E1");
}
}
我最初的想法是对ascii值进行2次模运算,并将它们存储在一个数组中,因为模运算只输出1和0,但我很快意识到这根本不起作用。代码对输入HI
输出000000011111111
,这不是预期的01001000 01001001
有没有一个更好的方法来解决这个问题使用国防部或有别的东西,我应该尝试代替?
3条答案
按热度按时间pjngdqdw1#
要按自然顺序打印8位,您必须生成从最高有效位到最低有效位的位,并在字节之间打印一个空格:
px9o7tmv2#
1.不要使用幻数。在
limits.h
中,有一个非常方便的宏定义,名为CHAR_BIT
。1.使用
unsigned
数字进行所有算术运算。1.您不需要调用
strlen
。1.你忘了除以二。
1.如果从最高有效位开始显示二进制数,人们会更好地阅读它们。
https://godbolt.org/z/oan56czGb
oyjwcjzk3#
除以2。
使用无符号类型。
反转打印顺序。
或者等待C23并使用
printf("%08hhb", message[i]);