2012-05-21 5 views
1

Возможно ли преобразовать UUID в 128-битное целое число с использованием C++ под linux. Как только я конвертирую UUID в целое число, мне нужно преобразовать целое число из 16 байтов в массив байтов, чтобы я мог отправить его на другой сервер через TCP.C++ UUID хранится как целое

Насколько я знаю (исправьте меня, если я ошибаюсь), нет никакой поддержки для работы с 16-байтовыми целыми числами на C++, можете ли вы пролить свет на то, как это сделать? Если невозможно сохранить и отправить его как целое число, я думаю о отправке uuid в виде строки.

+2

Почему бы просто не использовать ['boost.uuid'] (http://www.boost.org/doc/libs/1_49_0/libs/uuid/)? – KillianDS

+0

1) В какой форме вы первоначально держите UUID? 2) Какие операции вы хотите выполнить для 128-битного целого числа? –

+0

Я держу его как строку, но я понял, что я генерирую строку из uuid_t, которая в основном является unsigned char [16], поэтому, я думаю, мне не нужно ничего делать, чтобы преобразовать ее, мне интересно, будут ли эти 16 байтов совместим с GUID .Net. –

ответ

4

Почему вы хотите, чтобы представить его как 128 битное целое число?

Как представляется UUID? Предположительно это строка или уже какой-то 16-байтовый тип. Если это строка, вы можете сами вычислить представление 16-байтового массива, и если это уже один 16-байтовый длинный тип, вы можете просто просмотреть его непосредственно в виде 16-байтового массива.

Как всегда, что бы вы ни делали, вам нужно будет убедиться, что все стороны согласны с порядком байтов для представления сети. Реализации


C++ не требуется, чтобы иметь 128 битный целочисленный тип, но один из встроенных типов может быть 128 бит. long long возможно. Или ваша реализация может обеспечить расширенный целочисленный тип, который вы можете использовать.

Clang и я думаю, что GCC поддерживают тип __uint128_t, но, к сожалению, не следуют требованиям C++ для расширенных целых чисел для этого типа. Однако 128-разрядная арифметика должна работать, и поэтому вы должны иметь возможность делать обычные вещи, чтобы вставить UUID в этот тип, а затем просмотреть его как 16-байтовый массив.

+0

спасибо, ребята, я нашел то, что мне было нужно, uuid.h способен генерировать UUID типа uuid_t, который представляет собой массив без знака размера [16]. Мне не нужно его конвертировать ни к чему. Мне интересно, совместимы ли эти 16 байтов с типом GUID .Net. –

0

Для реализации 16-байтовых целых чисел в C++ вы можете проверить:
http://straymindcough.blogspot.com/2012/01/on-int128t.html

Как для: «Можно ли преобразовать UUID в 128 разрядное целое число с помощью C++ под Linux». Ответ: Да.

С наилучшими пожеланиями,
Бо

Смежные вопросы