回答
这里的一个32位整数570534080
可以分成四个8位无符号整数,它们就是IP地址。
int value = 570534080; // which is 0x2201a8c0 (0x22, 0x01, 0xa8, 0xc0)
unsigned char *ip = &value;
/* then */
ip[0] == 192;
ip[1] == 168;
ip[2] == 1;
ip[3] == 34;
请注意endian(big endian/little endian),这使@ KerrekSB的答案颠倒了。
编辑:
让我们使它更清晰。
在谈到IP地址和整数,实际上是两种类型的整数我们关注一下:
- IP地址的整数表示:
192.168.1.34
< ==>(((192 * 256 + 168) * 256 + 1) * 256 + 34
- 的实际数据(可能是比特流),你会收到并解释为一个32位整数,就像OP提供的那样:
570534080 <==> (0x22, 0x01, 0xa8, 0xc0)(on a little-endian machine) <==> (34.1.168.192)
。
请注意,这是平台特有的和危险的!由于这依赖于一个整数的字节顺序,这就是所谓的endianess。
再次编辑:
在这里,我会投票给@ DavidHeffernan的评论,这是使用inet_ntoa
。
见我的答案下的评论。你的解决方案不是我的“逆向”。我总是正确的;你需要知道该平台的字节顺序。 –
@KerrekSB我很抱歉,但我不相信你的'矿总是正确的;'。请看我的更新。 – starrify
是的,你说得对,我没有检查OP的实际价值。我认为这是一个数字IP地址,但实际上它是将线数据解释为一个int。 –
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main(void) {
int value=570534080;
struct in_addr addr = {value};
printf("%s", inet_ntoa(addr));
return 0;
}
对于Windows使用#include <winsock2.h>
inet_ntoa函数不会生成“可读”整数。看看http://stackoverflow.com/questions/30153966/why-do-inet-ntoa-and-inet-ntop-reverse-the-bytes –
@ m.r226这不是关于可读的整数 – kotlomoy
- 1. 将本地IP地址转换为整数
- 2. 将IP地址转换为IP范围
- 3. 将负数转换为IP地址python
- 4. 如何将整数数组转换为C++中的IP地址?
- 5. 转换IP地址的整数
- 6. 如何手动将整数转换为Ruby中的IP地址
- 7. 如何将IP地址转换为BigQuery中的整数?
- 8. 将IP地址转换为红宝石中的32位整数
- 9. 如何将IP地址转换为MAC地址字节数组?
- 10. 将IP地址转换为主机名
- 11. 如何将IP地址转换为DWORD?
- 12. 将int转换为IP地址
- 13. 将IP地址char转换为long
- 14. 将号码转换为IP地址(v4)
- 15. 将IP地址转换为位[]
- 16. 将邻居MAC地址转换为IP地址ns-3
- 17. Python - 将IP地址列表转换为地址范围列表
- 18. 如何将MAC地址转换为相应的IP地址?
- 19. Ryu:将数据路径转换为交换IP地址
- 20. 将空值转换为虚拟IP地址
- 21. 将IP地址转换为8位十六进制值
- 22. 在Java中将IP地址转换为十进制等效值?
- 23. 如何在保存到数据库之前将IP地址转换为整数
- 24. Python将Base64编码的IP地址转换为十进制IP地址
- 25. 将Azure预留IP地址(静态VIP)转换为公有IP地址
- 26. 如何将IP地址转换为VB.NET中的IP HostEntry?
- 27. MAC地址到IP转换
- 28. 如何将一个IP地址转换为一个整数与Lua?
- 29. 如何将IP地址转换为1到3之间的整数?
- 30. 将字节数组转换为IP地址
你可以叫'inet_ntoa' –