เล่นง่าย ๆ กับ การจัดการด้วย ตัวหนังสือ
Private Sub Command1_Click()
MsgBox MakeHexID(12345678)
End Sub
Function MakeHexID(tsid)
hexid = Right("0000000" & Hex(tsid), 8)
h1 = Mid(hexid, 1, 2)
h2 = Mid(hexid, 3, 2)
h3 = Mid(hexid, 5, 2)
h4 = Mid(hexid, 7, 2)
MakeHexID = h4 & h3 & h2 & h1
End Function
ผลลัพธ์ ของ MakeHexID(12345678)
คือ 12345678 ปกติ กดด้วย เครื่องคิดเลข ออกมาเป็น BC614E
แต่ ว่าเวลาเราจะใช้ ต้องเอามาทำให้ ครบ 4 byte ก่อน
คือ 00 ->> BC614E = 00BC614E
แล้ว ตัด ๆๆๆ
00
BC
61
4E
จับมาเรียงใหม่
4E 61 BC 00 -->> เป็น ผลลัพธ์ จ้า
หลักการ คือ
1 . เปลี่ยน ตัวเลข ให้เป็น ตัวหนังสือ ฐาน 16 โดย function hex << มีอยู่ใน vb
2 .แปะ 0 ไว้ ข้างหน้า ในกรณี ชุดเลข ฐาน 16 ยาวไม่ ครบ 8 ตัว
3. ตัด ชุด ตัวเลขที่ได้ มา ที่ละ 2 ตัว แล้วเอามาเรียงใหม่ ^^
เล่นกันง่ายๆ แบบนี้แหละ หุ ๆ
ข้อมูลชนิดที่เป็นตัวหนังสือ
เวลามอง จะเห็นว่า ค่ามันจะ เริ่มประมาณ 21 - FF
สังเกตุ ว่ามานจะเรียงติดกัน เพราะ ส่วนใหญเป็น ชื่อ หรือคำพูด
ซึ่ง จะอยู่ติดกัน สัก 3 - 10 bytes หรือ มากกว่านี้
เช่น
ชื่อ ABCD
41 42 43 44
สังเกตดู จะ เห็นว่า มีค่ามากกว่า 21 เรียงติด ๆ กัน
ปกติ ตัวเลขจะใช้ ค่า ตั้งแต่ 00 - FF แต่การเรียงจะ มี ค่า ที่ น้อยกว่า 21 มาแทรก ๆ อยู่ (ไม่จำเป็นเสมอไป)
เช่น เลข 75 แต่ข้อมูลตัวนี้ หมายถึง จำนวนเงิน จะใช้ 4 bytes ค่าที่เห็น 4B 00 00 00
แต่ถ้า 750,000 ค่าที่เห็นจะเป็น B0 71 0B 00 << ติดกะ 0B 00 น้อยกว่า 21
หรือค่าพวก hp หรือ sp จะเป็นข้อมูล 2 byte
สมมุติ ว่า ค่า hp สัก 500 ค่าที่เห็น F401 << จะเห็นว่าอยู่ติดกะ 01 ซึ่ง น้อยกว่า 21
แต่ถ้า เป็ฯตัวหนังสือที่เขียนว่า 500 จะเขียนเป็น 353030
ทำไมต้องน้อยกว่า 21
เพราะ 21 เป็นตัวเริ่มของชุด อักขระในระบบคอมพิวเตอร์ เรียกว่า ascii code เป็น เครื่องหมาย '!'
เนื่องจาก window ใช้ code แบบ ascii ข้อมูลที่ส่งมาให้ window เข้าใจก็ต้อง เป็น ascii ด้วย
แล้วจะรู้ได้ไงว่า ตัวเลขแต่ละตัวใช้กี่ byte
...ดูเอา เอง ^^ ส่วนใหญ่ ค่าน้อย ๆ จะ 1byte เช่น พวก level หรือ ธาตุ
แต่ ค่าที่มากหน่อยก็ 2 bytes
ถ้าค่าเยอะ ๆ อย่าง id หรือ texp ก็ 4 bytes
ว่าด้วยเรื่อง ascii กันหน่อยดีก่า
บางคนอาจสงสัย ว่าทำไม อักษร แต่ละตัวต้อง มีการกำหนดเป็นตัวเลขนั้นตัวเลขนี้
เช่น ascii ของตัว A ทั่ว ๆ ไปจะรู้จักกัน ว่ามีค่า = 65
B = 66 เป็นต้น
? ทำไมต้อง 65 หล่ะ
จริง ๆ แล้ว 65 เป็นเลขฐาน 10 ซึ่ง ถูกเข้าใจได้ง่ายโดย คน
แต่การกำหนดค่า ascii จิง ๆ ถูกกำหนดจากเลขฐาน 16 อย่างมีความหมาย โดยการจัดกลุ่มของ ตัวอักษรไว้เป็นพวก ๆ คือ
กลุ่มเครื่องหมาย + - * / .! เป็นต้น
กลุ่มตัวเลข 01234..... 9
กลุ่มตัวหนังสือ ABC...... Z
ทีนี้การ แยก โดยตัวเลขฐาน 16 เพื่อให้สังเกตุง่ายคือ
ตัวเครื่องหมาย จะขึ้นต้นด้วย 2 เช่น
21= ! , 22=" ,23=# ................ ,29= /
ตัวเลขขึ้นต้นด้วย 3
30= 0 ,31=1 ,32=2 ................ ,39= 9
ตัวหนังสืออังกฤษ ใหญ่ขึ้นด้วย 4
41= A ,42=B ,43=C .................. ถึง Z
ตัวหนังสืออังกฤษ เล็กขึ้นด้วย 6 <<< ทำไมไม่ขึ้นด้วย 5 เพราะถูกใช้ไปกับ เซตของตัวใหญ่แล้ว
61=a ,62=b ,63=c .................. ถึง z
หวังว่าน่าจะเป็นประโยชน์เล็ก ๆน้อย ๆ เพื่อการ ดู เลขฐาน 16 ให้ง่ายขึ้นครับ
Function n2h(number, nb)
For i = 1 To (nb * 2)
zerotem = zerotem & "0"
Next
rn = Right(zerotem & Hex(number), (nb * 2))
out = ""
For i = 1 To Len(rn) Step 2
out = Mid(rn, i, 2) & out
Next
n2h = out
End Function
เอามาฝาก อันนี้เป็น function ที่ผมใช้ในการ สร้าง ตัวเลขฐาน 16 ให้พร้อมส่ง คือ สลับ bytes order ให้
ซึ่งสามารถ ระบุได้ว่า เรากำลังจะ ทำกับ ตัวเลข ที่มีความยาวกี่ byte
เช่น ตัว id จะ เป็น 4 bytes
แต่พอ แปลงเป็น ฐาน 16 แล้ว ยังเอาไปใช้ ส่งข้อมูลไม่ได้
ต้องกลับ byte order ก่อน
เช่น 123456 = 1E240 เรา ต้องทำให้เป็น 40 E2 01 00
5000 = 1388 ====> 88 13
จะได้เป็น
tsid = 123456
tsid = n2h(tsid ,4)
ผลลัพธ์ จะได้ 40 E2 01 00
x = 5000
x = n2h( x , 2)
ผลลัพธ์ จะได้ 88 13
แต่ถ้า บอกว่า 4 byte
x = 5000
x = n2h( x , 4)
ผลลัพธ์ จะได้ 88 13 00 00
เคดิต http://www.paradizex.com/forum/index.php?s=&showtopic=154&view=findpost&p=981
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น