我将创建校验和计算器。我不明白我怎么做“现在取c0的结果为0x247,并且只保留最低8位,在本例中为0x47”。你能救我吗?
答案 0 :(得分:3)
简单,使用位掩码!
您可以使用按位AND运算符执行此操作。
以下是一些代码:
#include <stdio.h>
int main(){
int number = 0x247, firsteight;
firsteight = number & 0xFF;
printf("%x, %x", number, firsteight);
return 0;
}
它的工作原理是因为0xFF等于二进制的11111111。
所以这就是:
1001000111 = 0x247
0011111111 = 0xFF
----------- & (bitwise AND)
0001000111
答案 1 :(得分:2)
这是一个明显的重复,但这条评论but this is hex value. 0x247
困扰了我。有很多方法可以在系统中表示相同的数字:
int val = 01107; // 583 in octal
int val2 = 0x247; // 583 in hex
int val3 = 583; // 583 in dec
但是它们都是相同的值,如果我想以相同的方式获取其中任何一个的低8位,则使用按位运算符屏蔽该数字。
val3 & 255 = lower 8 bits
val2 & 0xFF = lower 8 bits
val & 0377 = lower 8 bits
不要以为我的意思是你必须对十六进制使用十六进制:
(val & 255) == (val2 & 255)
是一个真实的陈述。这就是为什么,无论数字如何表示,通常都会以二进制的方式来考虑它:
0010 0100 0111
& 0000 1111 1111
----------------
0000 0100 0111 <-- only the last 8 bits are kept
答案 2 :(得分:1)
如果您只需要int值的最后8位,请&
与0xFF
一起使用。
int a = 0x247;
int b = 0;
b = a & 0xFF;
答案 3 :(得分:1)
使用按位运算符。例如: 0101010011010001&amp; 0000000011111111 等于11010001。