我有一个任务要做,但是我不知道从哪里开始。我没想到,也绝对不想在代码中给出答案。我想要一些指导以做些什么,因为我有些失落。将变量打包和解包到一个字节中。您需要在一个字节中存储4个不同的值。值是:名称范围位engine_on 0-1 1gear_pos 0-4 3key_pos 0-2 2刹车1 0-1 1刹车2 0-1 1(LSB,最低有效位)编写一个包含5个参数的程序bytes.c(应将更少或更多视为错误)。参数应对应于上面的值/变量。例:字节1 2 2 1 1以上应视为:名称值engine_on 1gear_pos 2key_pos 2刹车1 1刹车2 1将这些值打包在一起作为整数(无符号字符)作为字节(无符号字符),并以十六进制格式将其打印输出到stdout,在此示例中,它应为“ AB”,对应于位“ 10101011”。此后,您的程序应返回0。如果您的程序发现任何错误(参数过多/输入错误,输入值错误。),您的程序应打印错误并返回非零值。我知道如何检查这些参数是否为5,但是我不知道下一步该怎么做。我已经阅读了很多有关移动的信息,但是我的大脑无法处理全部情况。感觉这应该是一个非常简单的例子,但是我在互联网上找不到任何类似的东西。“ AB”如何变成10101011?我已经检查了String到十六进制->4142。十六进制到位-> 1000000101110。 最佳答案 让我们调用字节b,如果将b设置为0,则最终得到(二进制)0000 0000(可读性空间)现在我们要将不同的部分打包到该字节中engine_on 0-1 1gear_pos 0-4 3key_pos 0-2 2brake1 0-1 1brake2 0-1 1Brake2很简单。我们可以将b设置为刹车2的值,最终将是0000 0000或0000 0001,具体取决于它是0还是1。现在我们要将制动器1设置为b。我们可以通过使用or或等号以及数字本身来实现此目的,但是将其移位到正确的位置。我们最终得到以下结果:b |= (brake1 << 1)让我们解释一下我是怎么来的:brake1 = 0000 0001 //lets assume its a 1 not a 0)(brake1 << 1) = 0000 0010b = 0000 0001 //lets assume brake 2 was 1.要将“ brake1”中的值“加”到b,如果b中的位为1或(brake1 b = b | (brake1 << 1) // which can also be written as:b |= (brake1 << 1)现在,您还可以添加其他部分,同时也可以使用更多位。我希望它有所帮助
10-01 05:29