Re: From HWaddress to long
On Jan 17, 2:09 pm, "Kevin P. Fleming" <n...@kpfleming.us> wrote:
On 01/17/2011 07:45 AM, Andrea Crotti wrote:
Andrea Crotti<andrea.crott...@gmail.com> writes:
In short I need an hash function that gives me a long from
an hardware address.
What could be an easy solution that still gives me a good
distribution?
From
"FF2212A.."
I thought I could simply do
(((16 * 16) % LONG_MAX) * 2) % LONG_MAX...
But probably it's a stupid idea.
A mac address is basically 24bytes, and a long is maybe max 8 bytes, so
of course I have to do something to squeeze it...
Of course something already done would be also good.
A generic string hash I'm not sure, since my strings only uses 16
possible characters.
(for example I found this
http://www.cplusplus.com/reference/std/locale/collate/hash/)
But I guess an md5/sha would be also fine, right?
A MAC address is 6 bytes (48 bits). It will fit in a 64-bit
unsigned integer (which might be a 'long' on some platforms
and not on others) just fine.
And it's guaranteed to fit in a long long. Depending on table
size and how MAC addresses are allocated, however, it's possible
that converting the MAC address to size_t might not result in
a very good hash. If that's the case, using a good string hash
over the six bytes could reduce collisions significantly.
--
James Kanze