01/10/2018, 16:08

Lấy 2 chữ số cuối trong dãy hexa để checksum như thế nào?

Hi các bạn,
các bạn cho mình hỏi, bây giờ mình có 1 dãy số trong hệ hexa chưa biết độ dài
xxxxxxxxxxx
để checksum thì so sánh 2 số cuối với FF,
bây giờ làm thế nào để có thể lấy được 2 số cuối trong dãy số đó ra và so sánh với FF.

HK boy viết 18:17 ngày 01/10/2018

Giả sử dãy hexa có dạng Axy (A là 1 đống các chữ số; x, y là chữ số), thì giá trị theo hệ 10 của dãy hexa đó là A * 16^2 + x * 16 + y = A * 256 + x * 16 + y

0xff = 255, cho nên muốn lấy 2 chữ số cuối của dãy hexa chỉ cần sử dụng thao tác AND (bitwise) với dãy và 0xff là được.

Demo:

>>> 0x394fae3 & 0xff
227
>>> 0xe3  # giá trị 2 c/s cuối, vừa đúng bằng giá trị của phép AND ở trên
227

Còn có 1 cách nhẹ nhàng hơn, đó là convert dãy hexa đó ra string, rồi lấy 2 kí tự cuối cùng.

Joseph Le viết 18:23 ngày 01/10/2018

tks bạn nhiều

Joseph Le viết 18:15 ngày 01/10/2018

Cho mình hỏi thêm là khi mình convert qua string thì có 1 vấn đề là
như trong mã hex thì A - 10 … F-15
Khi chuyển qua string thì A này nó đang hiểu là 1 ký tự trong mã Ascci
và khi chuyển vể số thì A - 17 chứ không phải là 10
giờ làm thế nào để nó hiểu được A đây là 1 số chứ không phải là 1 ký tự

HK boy viết 18:12 ngày 01/10/2018

‘A’ = 65 chứ nhỉ.

Bạn cần so sánh với FF như thế nào?

  • Nếu là so sánh bằng nhau, thì so sánh trực tiếp với xâu 'ff'.

  • Nếu là so sánh khác, bạn đổi lại về hệ thập phân rồi tính toán.

// đổi kí tự sang giá trị số theo hệ thập phân tương ứng
map = {'0': 0, '1': 1,..., '9': 9, 'A': 10,..., 'F': 15} // map lại các c/s,
// trong C++ là STL map, trong Python là dict, các ngôn ngữ khác bạn tự xem nhé 
Bài liên quan
0