回答
这里的一个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. 如何将整数数组转换为C++中的IP地址?
- 3. 转换IP地址的整数
- 4. 如何手动将整数转换为Ruby中的IP地址
- 5. 如何将IP地址转换为BigQuery中的整数?
- 6. 将IP地址转换为红宝石中的32位整数
- 7. 如何将IP地址转换为MAC地址字节数组?
- 8. 将号码转换为IP地址(v4)
- 9. 将int转换为IP地址
- 10. 如何将IP地址转换为DWORD?
- 11. 将IP地址转换为主机名
- 12. 如何将MAC地址转换为相应的IP地址?
- 13. Python - 将IP地址列表转换为地址范围列表
- 14. 将邻居MAC地址转换为IP地址ns-3
- 15. 在Java中将IP地址转换为十进制等效值?
- 16. 如何在保存到数据库之前将IP地址转换为整数
- 17. Python将Base64编码的IP地址转换为十进制IP地址
- 18. 如何将IP地址转换为VB.NET中的IP HostEntry?
- 19. MAC地址到IP转换
- 20. 如何将一个IP地址转换为一个整数与Lua?
- 21. 如何将IP地址转换为1到3之间的整数?
- 22. 在tcl中将IP地址转换为数字
- 23. 将字节数组转换为IP地址
- 24. 转换IP范围的IP地址
- 25. 如何将本地IP地址转换为域
- 26. 整数IP地址 - C
- 27. 的iOS转换IP地址整数和向后
- 28. 转换IP地址(IPv4)itno一个整数在R
- 29. 如何将MAC地址(字符串)转换为整数数组?
- 30. 将MAC地址转换为数据库中的整数
你可以叫'inet_ntoa' –