จุดความรู้พื้นฐาน
ip-> จำนวนเต็ม:
แปลงที่อยู่ IP เป็นอาร์เรย์ไบต์ผ่านกะซ้าย (<<), (&), หรือ (|) การดำเนินการเหล่านี้เป็น int เป็น int
จำนวนเต็ม-> IP:
การดำเนินการกะขวา (>>>) เลื่อนไปทางขวาเป็น 24 บิตจากนั้นดำเนินการตัวดำเนินการ (&) 0xff
การทำงานกะขวา (>>>), เลื่อน 16 บิตแล้วดำเนินการตัวดำเนินการ (&) 0xff
การทำงานกะขวา (>>>) ย้ายไปทางขวาของ 8 บิตจากนั้นดำเนินการตัวดำเนินการ (&) 0xff
ค่าจำนวนเต็มดำเนินการกับตัวดำเนินการ (&) 0xff และจำนวนที่ได้คือ IP ขั้นตอนที่สี่
ความคิด
ที่อยู่ IP เป็นประเภท int ตัวอย่างเช่น IP คือ "192.168.1.116" ซึ่งเทียบเท่ากับ "." 256, 1 และเมื่อมันซับซ้อนมันจะเร็วที่สุด
ประเภท int ไปยังที่อยู่ IP ความคิดที่คล้ายกันยกเว้นค่าน้ำหนัก แต่การดำเนินการสตริงบางอย่าง
รหัส
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #define len 16 typedef int uint ที่ไม่ได้ลงชื่อ ) กลับมา 0; = 0 && cur <= 255) {total += cur*pow (256, i);} i -; token = strtok (null, ".". ")} return ทั้งหมด; (char*str, int เริ่มต้น, int end) {int i, j; i ++, j -) {ถ้า (str [i]! = str [j]) {str [i] = str [i] ^ str [j]; ]; (ใหม่, '/0', len); โทเค็น "%d", cur); -1); สำหรับ (bt = ed = 0; ed <len;) {ในขณะที่ (ed <len && ใหม่ [ed]! = '.') {ed ++} swapstr (ใหม่, bt, ed -1); ED += 1; Scanf%S ("%s scanf ("%s s "%s scanf ("%s "%s scanf ("%s scanf ("%s s"%s scanf ("%s"%s scanf ("%s s . 0;}