Как лучше хранить MAC-адрес в базе данных?

В частности, необходимо хранить BD_ADDR в Sqlite, но вопрос интересен и для общего случая.
Понимаю, что можно его преобразовать в INTEGER как угодно, или хранить в TEXT просто как есть.

Поскольку форматы адресов стандартизованы (EUI-48, EUI-64), может быть, есть типовые решения для хранения? Устроило бы преобразование по какому-нибудь общему соглашению к INTEGER, поскольку адреса логично сделать ключами таблицы. Но нагуглить чего-либо такого не удалось.
  • Вопрос задан
  • 3897 просмотров
Решения вопроса 1
@Sash0k_k Автор вопроса
Решено, MAC-адрес для хранения будет храниться в INTEGER Sqlite (long в Java)
сделал свой вариант преобразования "читабельный MAC-адрес" <=> long, для android:

BluetoothDevice device;
final String mac = device.getAddress();
final long id = Long.parseLong(mac.replaceAll(":", ""), 16); 
final String back_mac = idToBD_ADDR(id);

private static String idToBD_ADDR(long id) {
    final byte LAST_BYTE = 5;
    StringBuilder address = new StringBuilder();
    for (byte i = 0; i <= LAST_BYTE; i++) {
        byte b = (byte) (id >> 8*i);
        address.append(new StringBuilder(String.format("%02x", b)).reverse());
        if (i != LAST_BYTE) address.append(":");
    }
    return address.reverse().toString();
}

метод idToBD_ADDR страшноват конечно, буду рад увидеть версию качественней
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Mercury13
Программист на «си с крестами» и не только
Поскольку MAC-адрес — это 6-байтовое число, проще всего преобразовать его в 8-байтовый INTEGER. Например, 12:34:56:78:9A:BC превращается в 0x1234'5678'9ABC. Это эффективно и вопрос лишь в ручном редактировании БД.
Ответ написан
Комментировать
Нагуглить не удалось потому, что MAC-адрес и есть Int, в котором первые два байта не значащие, а остальные записаны в hex. 28:d3:44:16:69:54 => 0x000028d344166954.
Ответ написан
@Sash0k_k Автор вопроса
@Mercury13, @fshp спасибо, я в общем это и хотел сделать.
Уточню, что в Java это будет long, а в sqlite да - можно хранить целые до 8 байт.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы