Một số cách đơn giản để băm số nguyên 32 bit (ví dụ: địa chỉ IP, ví dụ: Unix time_t, v.v.) xuống số nguyên 16 bit?Hash 32bit int đến 16bit int?
Ví dụ: hash_32b_to_16b(0x12345678)
có thể trả lại 0xABCD
.
Hãy bắt đầu với điều này như một giải pháp dụ khủng khiếp nhưng chức năng:
function hash_32b_to_16b(val32b) {
return val32b % 0xffff;
}
Câu hỏi là cụ thể về JavaScript, nhưng cảm thấy tự do để thêm bất kỳ giải pháp ngôn ngữ trung tính, tốt nhất là không sử dụng các hàm thư viện.
Ngữ cảnh cho câu hỏi này là tạo ID duy nhất (ví dụ: ID 64 bit có thể bao gồm một số băm 16 bit có giá trị 32 bit khác nhau). Tránh va chạm là quan trọng.
Đơn giản = tốt. Wacky + obfuscated = vui.
XOR cao 2 byte với 2 byte thấp? 0x1234 XOR 0x5678. Nhưng bạn không thể gắn thẻ câu hỏi bằng 'mật mã' và yêu cầu một cái gì đó như thế này ... –
@Remus: Tại sao tôi không thể gắn thẻ nó 'mật mã'?Đây không phải là một câu hỏi liên quan đến mật mã và cực kỳ đơn giản? P.S. Tại sao không đăng bình luận của bạn như một câu trả lời? – dkamins
Tới điểm của Remus, tôi đồng ý rằng đây không phải là về mật mã. Nếu tôi đang suy nghĩ về quyền này, băm 16 bit của bạn sẽ ánh xạ tới một trong hai số nguyên 32 bit. Tôi tò mò về vấn đề cụ thể mà bạn đang cố gắng giải quyết, và tôi hy vọng nó không liên quan gì đến an ninh. –