【发布时间】:2015-07-07 07:09:15
【问题描述】:
我正在研究 FreeBSH 开发人员手册,并且在那里我看到了用于 Socket 编程的代码:
struct sockaddr_in sa;
sa.sin_addr.s_addr = htonl((((((192 << 8) | 43) << 8) | 244) << 8) | 18);
为什么在这里使用按位移位和或?
我知道什么是移位和异或,我做了一个非常小的测试程序:
int c = 5;
printb(c);
int d = 5<<2;
printb(d);
int e = d | c;
printb(e);
哪个打印:
00000000000000000000000000000101
00000000000000000000000000010100
00000000000000000000000000010101
但是我不明白为什么对于 sa.sin_addr.s_addr 我需要使用以下值移动 ip 和/或它。谁能解释一下?
【问题讨论】:
-
它通过使用十进制数 18 作为最低 8 位,244 作为高 8 位,为
htonl创建一个 32 位参数(从 9 到 16),43 作为高 8 位(从 17 到 24),192 作为高 8 位(从 25 到 32) -
@mescalinum 是的,但是如何?为什么要异或?为什么要转移?
-
Sockets Essential 可以帮忙。
-
@KorayTugay,你的例子中没有
xor(^),你的意思是or(|) -
@AlterMann 是 |或者..
标签: c sockets ip bit-manipulation