Какие простые способы хэшировать 32-разрядное целое число (например, IP-адрес, например Unix time_t и т. Д.), До 16-битного целого?Hash 32bit int to 16bit int?
E.g. hash_32b_to_16b(0x12345678)
возвращение товара не принимается 0xABCD
.
Давайте начнем с этого, как ужасным, но функциональным примером решение:
function hash_32b_to_16b(val32b) {
return val32b % 0xffff;
}
Вопрос конкретно о JavaScript, но не стесняйтесь добавлять любые языковые нейтральные решения, желательно без использования библиотечных функций.
Контекст для этого вопроса генерирует уникальные идентификаторы (например, 64-разрядный идентификатор может состоять из нескольких 16-разрядных хэшей различных 32-битных значений). Важное значение имеет предотвращение столкновений.
Простой = хороший. Wacky + obfuscated = забавный.
XOR высокие 2 байта с низкими 2 байтами? 0x1234 XOR 0x5678. Но вы не можете пометить вопрос «криптографией» и попросить что-то вроде этого ... –
@Remus: Почему я не могу пометить его «криптографией»?Разве это не дистиллированный и чрезвычайно простой вопрос, связанный с криптованием? Постскриптум Почему бы не написать свой комментарий в качестве ответа? – dkamins
К моменту Ремуса я согласен, что речь идет не о криптографии. Если я думаю об этом праве, ваш 16-битный хеш будет отображаться в одном из двух 32-битных целых чисел. Мне интересно узнать о конкретной проблеме, которую вы пытаетесь решить, и я надеюсь, что это не имеет никакого отношения к безопасности. –