Как перевести ГУИД в число и обратно? #378881


#0 by Гений 1С
Сабж.
#1 by rs_trade
наверно так же как и 16-ричное число в десятичное, хотя могу ошибаться....
#2 by Гений 1С
Там порядок тетрадок важен
#3 by rs_trade
ты хочешь именно в десятичное число?
#4 by Господин ПЖ
а как его обратно собрать?...
#5 by Балабес
сделать тип строка
#6 by rs_trade
если просто взять гуид как 16-ричное число и убрать разделители, страшно представить какое там десятичное число получиться...
#7 by rs_trade
хотя собственно гуид и есть число...только не десятичное...
#8 by wertyu
уже заводил тему - что опять вотка?
#9 by Мелкий бес
Функция ПолучитьGUIDПоУникальномуИдентификатору(Знач UUID)
#10 by Гений 1С
Там было несколько другое
#11 by wertyu
ну тогда сорри
#12 by Гений 1С
Это проверенная информация?
#13 by wertyu
здесь не церковь, вас не обманут (с) Бендер
#14 by rs_trade
вполне очевидная функция, что не понятного в ней?
#15 by Гений 1С
меня только порядок тетрад беспокоит. Ну ладно, если все ок. то я включаю ее в свою библиотеку функций.
#16 by Гений 1С
Вроде так:
#17 by wertyu
если не секрет ты чего делаешь?
#18 by rs_trade
а зачем?
#19 by Гений 1С
Синхронизирую контакты с аутлук, в поле User4 контакта проставляю уникальный номер ссылки, соответствующей этому контакту в справочнике Контакты. Преобразовываю ГУИД в длину 25 символов по 36-ричной системе счисления, чтобы занимал 25, а не 32 символа, экономия таки.
#20 by rs_trade
контактов миллионов 50?
#21 by Гений 1С
а обратный процесс как? вот у меня есть число, как его перевести в GUID?
#22 by wertyu
ладно тебе это же Гений - можно уже было привыкнуть
#23 by Гений 1С
нет около 2000, просто при отправке на смартфон экономия 7*2000 = 14 кбайт.
#24 by rs_trade
для смартфона да, актуально...
#25 by Гений 1С
#26 by Гений 1С
И тест соответственно:
#27 by Гений 1С
Тест выдает: 22345200-abe8-4f60-90c8-0d43c5f6c0f6 192 447 559 805 613 441 075 694 136 988 370 489 856 22345200-abe8-4f60-90c8-0d43c5f6c0f6 8KKJTDWBYFOY845G9L8ICSS8W 22345200-abe8-4f60-90c8-0d43c5f6c0f6 Короче, я только не уверен, что мне Злобный Мальчик дал правильный алгол для преобразования ГУИД в число, но если он правильный, то все пучком.
#28 by Гений 1С
Коллеги, на партнерском не могут мне помочь. Может вы подскажете: Написал алгоритм для перевода ГУИД в 16-ричный формат. Подскажите, коллеги, правильно или нет. Переводил ГУИД: "22345200-abe8-4f60-90c8-0d43c5f6c0f6" Получил шестнадцатичеричное число: 90C80D43C5F6C0F64F60ABE822345200
#29 by luns
Странное пристрастие к ГУИДам... что не ветка то про гуид... Наверное это потому что они длинные... ))))))))))
#30 by NcSteel
Краснов Денис очень подробно ответил.
#31 by Гений 1С
Не фига он не ответил. У меня был конкретный вопрос - правильно ли я перевел число ГУИД в шестнадцатеричный формат. А он что ответил?
#32 by Гений 1С
Вылизывают библиотеку функций просто
#33 by NcSteel
"Если представлять ГУИД как это делает 1С в строках <Объект не найден....>, то скомпоновал ты правильно." Краснов Денис.
#34 by Гений 1С
а если нет? меня интересует не как 1с переводит, а как правильно. Дайте мне ссылку на страницу в интернете, где написано: "Например, ГУИД такой-то в шестнадцатеричной форме пишется так".
#35 by Odin1C
Эта функция слева прибавляет 32 символа "0"?
#36 by Deon
фиксин, ты женат?
#37 by Гений 1С
сходи в мой дневник и узнаешь, гыгыгы нет, она дополняет до длины 32.
#38 by Гений 1С
Блин, так неужели правильный ответ знает только БГ. Коллеги, кто снимет имидж "тупого 1сника"???
#39 by NcSteel
Нет "правильного" перевода в число. Какой алгоритм задашь такой и будет.
#40 by Гений 1С
Коллега, ну что вы такое говорите? ГУИД: "22345200-abe8-4f60-90c8-0d43c5f6c0f6" это вполне конкретное 128-битное число. Оно не может быть произвольным, т.к. по ГУИД формируется например CLSID OLE-объектов. Вот я и спрашиваю, это: ox90C80D43C5F6C0F64F60ABE822345200 или нет
#41 by bahmet
Спецом для тебя запустил скуль и написал: print cast(@a as varbinary) И вот какой ответ: 0xBB67BF402C745543ABB9DFF6A60BD701
#42 by Гений 1С
блин, ты все запутал. кому теперь верить?
#43 by Гений 1С
блин, эта тема освещена где-нибудь в интернете, или такой банальнейший вопрос остался за гранью освещения
#44 by Гений 1С
есть какой-то стандарт преобразования ГУид в число?
#45 by Мой ник
ты рождён, чтобы задокументировать эту фишку и сделать внятное описание в интернете. А то наделали гуи, зачем не понятно, никто не знает как работает.
#46 by bahmet
Хочешь сказать в Microsoft SQL 2005 наврали с преобразованием?
#47 by Гений 1С
Я хочу найти ссылку в документации, блин Счас буду копать про ToByteArray
#48 by Гений 1С
нет, я просто тащусь. Никто не знает такой банальнейшей вещи, ладно я дебил... но другие-то
#49 by Господин ПЖ
#50 by kot_bcc
Читаю себе, читаю. Сирожа, все дела. Тут бац, и ссылка на майкрософт. Ну, думаю, вот и гейтсу теперь Осипов снится будет. Потом уже перевел взгляд, увидел автора поста. Вы так не пугайте:) ЗЫ на : Вообще, такие вещи сперва стоит проверять. Аутлук хранит строки в UTF-16. Паршивая там экономия будет.
#51 by Гений 1С
Не скажи, на 20 000 контактах то, уже не 7 байт, а 14!
#52 by Гений 1С
к тому же с чего ты взял, что значения полей она хранит в UTF 16, возможно это текст хранится в этой кодировке
#53 by Гений 1С
Да и вообще, вопрос вроде бы простой, а ответ никто не знает, гыгыгы.
#54 by Гений 1С
Т.к. вопрос оказался сложнее, чем народ думал, задал еще и на SQL:
#55 by kot_bcc
Какие 14 байт? 16 байт GUID как GUID, и 50 байт на GUID как строку. Еще раз - какие 14 байт какой экономии?
#56 by kot_bcc
Достаточно открыть pst, чтобы в этом убедиться.
#57 by kot_bcc
+ "50 байт...на строку" + "если 25 символов в 36-ричной системе"
#58 by kot_bcc
+ И чем же отличается поле с 25-значным 36-ричным числом от поля текстового?
#59 by rs_trade
по сабжу, GUID это и есть число...
#60 by Гений 1С
Как ты собираешься в аутлуке хранить GUID как GUID По сабжу меня интересовал порядок тетрад, чтобы преобразовать GUID в 16ричную форму, не надо умничать на пустом месте, буквоедство detected
#61 by Дуб
ещё один проснулся. Жениться тебе надо.
#62 by kot_bcc
А догадаться слабо? Как 8 пар байт. Причем, в том же самом поле типа "Строка". И прежде чем кричать про нули - советую таки попробовать.
#63 by H A D G E H O G s
Че раскричались?
#64 by kot_bcc
:))))) Пытаемся представить, как будет выглядеть чудак, пытающийся позвонить по смартфону с 20000 контактов:)
#65 by H A D G E H O G s
Счаст напишу алгоритм
#66 by H A D G E H O G s
Погодь, чего то я не въехал, Гений. Тебе же просто надо число из 16-ричной системы в 10-тичную перевести. И все!
#67 by H A D G E H O G s
Ты откуда проблему на 60 постов высосал?
#68 by Гений 1С
если я догадаюсь - я могу и ошибитьяс, а мне надо точно знать. Я этот код в библиотеку функций включаю
#69 by Гений 1С
нолик лишний, у меня 2000 контактов
#70 by kot_bcc
Внимательно курим пост
#71 by Гений 1С
Описка
#72 by kot_bcc
Ладно. Говорю точнее. С точки зрения microsoft - гуид это 16 байт, которые можно представить также в виде 4 длинных слов (слева направо, индекс с 0) (т.н. "старое" представление), или в виде строки в нескольких вариантах, или в наборе из (длинное слово, короткое слово, короткое слово, 12 байт).
#73 by kot_bcc
Продолжать?
#74 by kot_bcc
Еще на Человек, ковыряющий 2000 контактов, смотрится примерно также, как человек с 20000 контактов. Качесвтенный переход, вообще говоря, несколько ниже, как я понимаю.
#75 by kot_bcc
+ Я таки продолжу. Вопрос про разнообразие видов строк представления GUID почти тривиален. В контексте 1С это либо вид "{ХХХХХХХХ-ХХХХ-ХХХХ-ХХХХХХХХХХХХ}", либо какой-либо пользовательский (например - в 36-ричной системе).
#76 by kot_bcc
+ Но менять систему исчисления имеет смысл только ради экономии (losless-сжатия). Причем, необходимо учитывать, что существуют более эффективные способы такого сжатия. Об одном из которых я и говорю. Он очень прост. Достаточно перейти от представления в виде строки к представлению в виде набора чисел.
#77 by kot_bcc
+ 1. В очепятка. "12 байт" -> "6 байт" 2. Совершенно необязательно следовать представлениям microsoft о группах в наборе GUID. Достаточно обеспечить взаимное преобразование. Что и было сделано (со строкой), например, в .
#78 by kot_bcc
+ Ну, и, собсно, пример losless без строки. Представим GUID как 8 коротких слов (по 16 бит). Такое представление тривиально хранится в строковых переменных с кодировкой UTF-16 (т.е. везде, практически): одно слово - один символ, всего 8 символов.
#79 by kot_bcc
Осталось только пробразовать группы символов (по 4 16-ричных символа на каждое слово) из "классического" строкового представления GUID в числа и обратно.
#80 by kot_bcc
Ему это число (128 бит в пределе) надо еще как-то засунуть в Outlook, в контакты. Да еще он хочет, чтобы покороче:)
#81 by kot_bcc
+ Здесь я вижу только один подводный камень. Все сказанное не проверялось на wince-девайсах. Если winmobile 5/6 - проблем с нулевыми символами быть не должно.
#82 by Гений 1С
Меня интересует вопрос академически, а не "лишь бы сделать", лишь бы сделать не вопрос. Меня интересует, в каком именно порядке должны идти в результирующее число тетрады из ГУИД. Но вы не парьтесь, на партнерке мне уже дали правильный ответ. По крайней мере в SQL и в функции JAVA guidtobyteArray результат одинаковый, значит можно считать его правильным.
#83 by bahmet
! выруби своего дятла и вруби гения, а потом кури пост + кури свою найденую ссылку на сайте мелкомягких...
#84 by Serg_1960
Кину ссылку на Вики - может поможет разобраться с типами GUID'ов и зачем "переставляют" группы
#85 by Гений 1С
Просто приведи пример. Хахаха. В этой статье строку: "Например, '22345200-abe8-4f60-90c8-0d43c5f6c0f6' соответствует шестнадцатеричному 128-битному числу 0x00523422E8AB604F90C80D43C5F6C0F6" написал я, по материалам разборки полетов с ГУИД на партнерке. Надеюсь, правильно.
#86 by Гений 1С
Написал функцию конвертации, провел тесты: ГУИД: 40bf67bb-742c-4355-abb9-dff6a60bd701 ГУИД числом: 249 104 320 812 803 032 337 390 685 874 299 852 545 ГУИД в шестнадцатеричной с/с: BB67BF402C745543ABB9DFF6A60BD701 ГУИД из шестнадцатеричной с/с обратно: 249 104 320 812 803 032 337 390 685 874 299 852 545 ГУИД: 22345200-abe8-4f60-90c8-0d43c5f6c0f6 ГУИД числом: 426 825 793 464 474 646 002 922 100 115 292 406 ГУИД в шестнадцатеричной с/с: 523422E8AB604F90C80D43C5F6C0F6 ГУИД из шестнадцатеричной с/с обратно: 426 825 793 464 474 646 002 922 100 115 292 406 Что забавно, функции конвертации числа в ГУИД и обратно оказались симметричными, т.е. практически идентичный код, наверное это как раз и говорит о том, что конвертация правильная: </pre>
#87 by Балабес
ГУИД для лохов, даже 1С использует binary
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С