Я хочу отправить имена функций из слабой встроенной системы на хост-компьютер для целей отладки. Так как эти два соединены через RS232, который является коротким по пропускной способности, я не хочу посылать имя функции буквально. Есть около 15 символов длинных имен функций, и я иногда хочу посылать эти имена с довольно высокой скоростью.
Решение, о котором я подумал, состояло в том, чтобы найти хеш-функцию, которая хэширует эти имена функций в один байт, и отправлять только этот байт. Хост-компьютер будет сканировать все функции в источнике, вычислять их хэш, используя ту же функцию, а затем преобразовывать хэш в исходную строку.
Хеш-функция должна быть
- Без столкновений для коротких струн.
- Простой (поскольку я не хочу, чтобы во встроенной системе было слишком много кода).
- соответствует одному байту
Очевидно, что его не нужно защищать никакими средствами, только без столкновений. Поэтому я не думаю, что использование хэш-функции, связанной с криптографией, стоит их сложности.
Пример кода:
int myfunc() {
sendToHost(hash("myfunc"));
}
Хозяин сможет представить мне список случаев, когда выполнялась функция myfunc
.
Есть ли какая-нибудь известная хеш-функция, которая поддерживает вышеуказанные условия?
Edit:
- Полагаю, я буду использовать намного меньше 256 имен функций.
- Я могу использовать больше, чем один байт, два байта обеспечат мне хорошее покрытие.
- Я предпочитаю использовать хеш-функцию вместо того, чтобы использовать одну и ту же функцию-байтовую карту на клиенте и сервере, потому что (1) у меня нет реализации карты на клиенте, и я не уверен, что хочу поставить один для целей отладки. (2) Требуется другой инструмент в моей цепочке сборки, чтобы внедрить таблицу имен функций в код моей встроенной системы. Хеш лучше в этом отношении, даже если это означает, что я буду иметь столкновение время от времени.