Tôi gặp sự cố với inet_aton
để chuyển đổi địa chỉ mạng. Đoạn code dưới đây hoạt động tốt để chuyển đổi địa chỉ 10.0.0.1
inet_aton chuyển đổi 010.000.000.001 sai?
char *x1;
struct sockaddr_in si_other;
inet_aton("10.0.0.1", &si_other.sin_addr);
printf("si_other.sin_addr =%lu\n",si_other.sin_addr);
x1 = inet_ntoa(si_other.sin_addr);
printf("x1=%s\n",x1);
Nó ra:
si_other.sin_addr =16777226
x1=10.0.0.01
Không có vấn đề cho đến nay. Tuy nhiên, chức năng công trình kỳ lạ khi 010.000.000.001
được truyền
char *x2;
struct sockaddr_in si_other2;
inet_aton("010.000.000.001", &si_other2.sin_addr);
printf("si_other2.sin_addr =%lu\n",si_other2.sin_addr);
x2 = inet_ntoa(si_other2.sin_addr);
printf("x2=%s\n",x2);
kết quả đầu ra:
si_other.sin_addr2 =16777224
x2=8.0.0.01
Chức năng hoạt động tốt khi 192.168.0.1
và 192.168.000.001
được thông qua.
Bất cứ ai có thể giải thích cho tôi vấn đề là gì và cách tôi có thể khắc phục sự cố? (lưu ý: Tôi cần phải chuyển địa chỉ IP dưới dạng 010.000.000.001
vào mã của tôi)
Nếu bạn không thể chuẩn hóa các địa chỉ có dấu thập phân của mình thành ký hiệu chiều rộng biến tiêu chuẩn, bạn sẽ phải viết hàm của chính mình tương đương với 'inet_aton' xử lý chiều rộng cố định không chuẩn Địa chỉ IPv4. Chúc vui vẻ! –