|
Как перевести ГУИД в число и обратно? | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
13.12.08
✎
11:51
|
Сабж.
|
|||
1
rs_trade
13.12.08
✎
11:55
|
(0) наверно так же как и 16-ричное число в десятичное, хотя могу ошибаться....
|
|||
2
Гений 1С
гуру
13.12.08
✎
11:56
|
(1) Там порядок тетрадок важен
|
|||
3
rs_trade
13.12.08
✎
11:56
|
(2) ты хочешь именно в десятичное число?
|
|||
4
Господин ПЖ
13.12.08
✎
11:57
|
(1) а как его обратно собрать?...
|
|||
5
Балабес
13.12.08
✎
11:58
|
сделать тип строка
|
|||
6
rs_trade
13.12.08
✎
11:58
|
если просто взять гуид как 16-ричное число и убрать разделители, страшно представить какое там десятичное число получиться...
|
|||
7
rs_trade
13.12.08
✎
11:59
|
хотя собственно гуид и есть число...только не десятичное...
|
|||
8
wertyu
13.12.08
✎
12:01
|
(0) уже заводил тему - что опять вотка?
|
|||
9
Мелкий бес
13.12.08
✎
12:06
|
Функция ПолучитьGUIDПоУникальномуИдентификатору(Знач UUID)
ч1 = Сред(UUID,20,4); ч2 = Сред(UUID,25,12); ч3 = Сред(UUID,15,4); ч4 = Сред(UUID,10,4); ч5 = Сред(UUID,1,8); Возврат "0x" + ч1 + ч2 + ч3 + ч4 + ч5; КонецФункции |
|||
10
Гений 1С
гуру
13.12.08
✎
12:12
|
(8) Там было несколько другое
|
|||
11
wertyu
13.12.08
✎
12:13
|
(10) ну тогда сорри
|
|||
12
Гений 1С
гуру
13.12.08
✎
12:13
|
(9) Это проверенная информация?
|
|||
13
wertyu
13.12.08
✎
12:14
|
(12) здесь не церковь, вас не обманут (с) Бендер
|
|||
14
rs_trade
13.12.08
✎
12:15
|
(12) вполне очевидная функция, что не понятного в ней?
|
|||
15
Гений 1С
гуру
13.12.08
✎
12:17
|
(14) меня только порядок тетрад беспокоит. Ну ладно, если все ок. то я включаю ее в свою библиотеку функций.
|
|||
16
Гений 1С
гуру
13.12.08
✎
12:18
|
Вроде так:
Функция УникальныйИдентификаторВЧисло(GUID) Экспорт //Назначение: Преобразует GUID в число //ДатаСоздания: 20080101 //Автор: Fixin //Тестирована: Да //Благодарность: МелкийБес за указание порядка тетрад //Ссылка: v8: Как перевести ГУИД в число и обратно? //Описание: ч1 = Сред(GUID,20,4); ч2 = Сред(GUID,25,12); ч3 = Сред(GUID,15,4); ч4 = Сред(GUID,10,4); ч5 = Сред(GUID,1,8); СтрGUID = ч1 + ч2 + ч3 + ч4 + ч5; //СтрGUID = УникальныйИдентификаторВСтроку(GUID); Сумма=0; Множитель=1; Для Инд=1 По СтрДлина(СтрGUID) Цикл Симв=ВРЕГ(Сред(СтрGUID, Инд, 1)); Поз=Найти("123456789ABCDEF", Симв); Сумма=Сумма+Поз*Множитель; Множитель=Множитель*16; КонецЦикла; Возврат Сумма; КонецФункции |
|||
17
wertyu
13.12.08
✎
12:19
|
(16) если не секрет ты чего делаешь?
|
|||
18
rs_trade
13.12.08
✎
12:20
|
(16)а зачем?
|
|||
19
Гений 1С
гуру
13.12.08
✎
12:31
|
(17) Синхронизирую контакты с аутлук, в поле User4 контакта проставляю уникальный номер ссылки, соответствующей этому контакту в справочнике Контакты. Преобразовываю ГУИД в длину 25 символов по 36-ричной системе счисления, чтобы занимал 25, а не 32 символа, экономия таки.
|
|||
20
rs_trade
13.12.08
✎
12:33
|
(19) контактов миллионов 50?
|
|||
21
Гений 1С
гуру
13.12.08
✎
12:34
|
а обратный процесс как? вот у меня есть число, как его перевести в GUID?
|
|||
22
wertyu
13.12.08
✎
12:35
|
(20) ладно тебе это же Гений - можно уже было привыкнуть
|
|||
23
Гений 1С
гуру
13.12.08
✎
12:35
|
(20) нет около 2000, просто при отправке на смартфон экономия 7*2000 = 14 кбайт.
|
|||
24
rs_trade
13.12.08
✎
12:39
|
(23) для смартфона да, актуально...
|
|||
25
Гений 1С
гуру
13.12.08
✎
14:01
|
Функция СжатыйУникальныйИдентификатор(ГУИД = Неопределено) Экспорт
//Назначение: Возвращает 25-разрядную строку из ГУИД по базе: "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" //ДатаСоздания: 20081213 //Автор: Fixin //Тестирована: Да //$ГУИД: Неопределено или УникальныйИдентификатор //Тест: // ГУИД = Новый УникальныйИдентификатор("22345200-abe8-4f60-90c8-0d43c5f6c0f6"); // Сообщить(ГУИД); // Ч = бфТипы.УникальныйИдентификаторВЧисло(ГУИД); // Сообщить(Ч); // РезГуид = бфТипы.УникальныйИдентификаторИзЧисла(Ч); // Сообщить(РЕЗГУИД); // ГУИДСжатый = бфТипы.СжатыйУникальныйИдентификатор(ГУИД); // Сообщить(ГУИДСжатый); // РезГУИД2 = бфТипы.УникальныйИдентификаторИзСжатого(ГУИДСжатый); // Сообщить(РЕЗГУИД2); Если ГУИД = Неопределено Тогда ТекГУИД = Новый УникальныйИдентификатор(); Иначе ТекГУИД = ГУИД; КонецЕсли; Ч = УникальныйИдентификаторВЧисло(ТекГУИД); Р = бфМат.ПереводЧислаВСистемуСчисления(Ч, 36, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"); Р = бфСтроки.ДобавитьНачСимвол(Р, 25, "0"); //Нормализируем до длины 25 Возврат Р; КонецФункции Функция УникальныйИдентификаторИзСжатого(СжатыйГУИД) Экспорт //Назначение: Возвращает обычный уникальный идентификатор из сжатого 25-разрядного //ДатаСоздания: 20081213 //Автор: Fixin //Тестирована: Нет //$ГУИД: Неопределено или УникальныйИдентификатор Ч = бфМат.ПереводИзСистемыСчисленияВЧисло(СжатыйГУИД, 36, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"); Р = бфТипы.УникальныйИдентификаторИзЧисла(Ч); Возврат Р; КонецФункции Функция УникальныйИдентификаторВЧисло(GUID) Экспорт //Назначение: Преобразует GUID в число //ДатаСоздания: 20080101 //Автор: Fixin //Тестирована: Да //Благодарность: МелкийБес за указание порядка тетрад //Ссылка: v8: Как перевести ГУИД в число и обратно? //Описание: СтрокаGUID = Строка(GUID); ч1 = Сред(СтрокаGUID,20,4); ч2 = Сред(СтрокаGUID,25,12); ч3 = Сред(СтрокаGUID,15,4); ч4 = Сред(СтрокаGUID,10,4); ч5 = Сред(СтрокаGUID,1,8); СтрGUID = ч1 + ч2 + ч3 + ч4 + ч5; Ч = бфМат.ПереводИзСистемыСчисленияВЧисло(СтрGUID, 16); Возврат Ч; КонецФункции Функция УникальныйИдентификаторИзЧисла(Ч) Экспорт //Назначение: Преобразует число в уникальный идентификатор //ДатаСоздания: 20081213 //Автор: Fixin //Тестирована: Да //Описание: СтрокаGUID = бфСтроки.ДобавитьНачСимвол(бфМат.ПереводЧислаВСистемуСчисления(Ч, 16), 32, "0"); ч4 = Сред(СтрокаGUID,1,4); ч5 = Сред(СтрокаGUID,5,12); ч3 = Сред(СтрокаGUID,17,4); ч2 = Сред(СтрокаGUID,21,4); ч1 = Сред(СтрокаGUID,25,8); СтрGUID = ч1 + "-" + ч2 + "-" + ч3 + "-" +ч4 + "-" + ч5; Возврат Новый УникальныйИдентификатор(СтрGUID); КонецФункции |
|||
26
Гений 1С
гуру
13.12.08
✎
14:02
|
И тест соответственно:
ГУИД = Новый УникальныйИдентификатор("22345200-abe8-4f60-90c8-0d43c5f6c0f6"); Сообщить(ГУИД); Ч = бфТипы.УникальныйИдентификаторВЧисло(ГУИД); Сообщить(Ч); РезГуид = бфТипы.УникальныйИдентификаторИзЧисла(Ч); Сообщить(РЕЗГУИД); ГУИДСжатый = бфТипы.СжатыйУникальныйИдентификатор(ГУИД); Сообщить(ГУИДСжатый); РезГУИД2 = бфТипы.УникальныйИдентификаторИзСжатого(ГУИДСжатый); Сообщить(РЕЗГУИД2); |
|||
27
Гений 1С
гуру
13.12.08
✎
14:02
|
Тест выдает:
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
Гений 1С
гуру
15.12.08
✎
09:43
|
http://partners.v8.1c.ru/forum/thread.jsp?id=640527
Коллеги, на партнерском не могут мне помочь. Может вы подскажете: Написал алгоритм для перевода ГУИД в 16-ричный формат. Подскажите, коллеги, правильно или нет. Переводил ГУИД: "22345200-abe8-4f60-90c8-0d43c5f6c0f6" Получил шестнадцатичеричное число: 90C80D43C5F6C0F64F60ABE822345200 |
|||
29
luns
15.12.08
✎
09:49
|
Странное пристрастие к ГУИДам... что не ветка то про гуид...
Наверное это потому что они длинные... )))))))))) |
|||
30
NcSteel
15.12.08
✎
09:54
|
Краснов Денис очень подробно ответил.
|
|||
31
Гений 1С
гуру
15.12.08
✎
09:59
|
(30) Не фига он не ответил. У меня был конкретный вопрос - правильно ли я перевел число ГУИД в шестнадцатеричный формат. А он что ответил?
|
|||
32
Гений 1С
гуру
15.12.08
✎
09:59
|
(29) Вылизывают библиотеку функций просто
|
|||
33
NcSteel
15.12.08
✎
10:06
|
"Если представлять ГУИД как это делает 1С в строках <Объект не найден....>, то скомпоновал ты правильно." Краснов Денис.
|
|||
34
Гений 1С
гуру
15.12.08
✎
10:24
|
(33) а если нет? меня интересует не как 1с переводит, а как правильно.
Дайте мне ссылку на страницу в интернете, где написано: "Например, ГУИД такой-то в шестнадцатеричной форме пишется так". |
|||
35
Odin1C
15.12.08
✎
10:26
|
(25) СтрокаGUID = бфСтроки.ДобавитьНачСимвол(бфМат.ПереводЧислаВСистемуСчисления(Ч, 16), 32, "0");
Эта функция слева прибавляет 32 символа "0"? |
|||
36
Deon
15.12.08
✎
10:31
|
фиксин, ты женат?
|
|||
37
Гений 1С
гуру
15.12.08
✎
11:43
|
(36) сходи в мой дневник и узнаешь, гыгыгы
(35) нет, она дополняет до длины 32. |
|||
38
Гений 1С
гуру
15.12.08
✎
11:43
|
Блин, так неужели правильный ответ знает только БГ.
Коллеги, кто снимет имидж "тупого 1сника"??? |
|||
39
NcSteel
15.12.08
✎
11:52
|
Нет "правильного" перевода в число. Какой алгоритм задашь такой и будет.
|
|||
40
Гений 1С
гуру
15.12.08
✎
12:12
|
(39)
Коллега, ну что вы такое говорите? ГУИД: "22345200-abe8-4f60-90c8-0d43c5f6c0f6" это вполне конкретное 128-битное число. Оно не может быть произвольным, т.к. по ГУИД формируется например CLSID OLE-объектов. Вот я и спрашиваю, это: ox90C80D43C5F6C0F64F60ABE822345200 или нет |
|||
41
bahmet
15.12.08
✎
12:27
|
(40) Спецом для тебя запустил скуль и написал:
declare @a uniqueidentifier set @a = '40bf67bb-742c-4355-abb9-dff6a60bd701' print cast(@a as varbinary) И вот какой ответ: 0xBB67BF402C745543ABB9DFF6A60BD701 |
|||
42
Гений 1С
гуру
15.12.08
✎
13:10
|
блин, ты все запутал. кому теперь верить?
|
|||
43
Гений 1С
гуру
15.12.08
✎
13:26
|
блин, эта тема освещена где-нибудь в интернете, или такой банальнейший вопрос остался за гранью освещения
|
|||
44
Гений 1С
гуру
15.12.08
✎
13:27
|
есть какой-то стандарт преобразования ГУид в число?
|
|||
45
Мой ник
15.12.08
✎
13:28
|
(43) ты рождён, чтобы задокументировать эту фишку и сделать внятное описание в интернете. А то наделали гуи, зачем не понятно, никто не знает как работает.
|
|||
46
bahmet
15.12.08
✎
15:09
|
(42)(43)(44)Хочешь сказать в Microsoft SQL 2005 наврали с преобразованием?
|
|||
47
Гений 1С
гуру
15.12.08
✎
19:15
|
(46) Я хочу найти ссылку в документации, блин
Счас буду копать про ToByteArray() |
|||
48
Гений 1С
гуру
15.12.08
✎
19:18
|
нет, я просто тащусь. Никто не знает такой банальнейшей вещи, ладно я дебил... но другие-то
|
|||
49
Господин ПЖ
15.12.08
✎
19:24
|
||||
50
kot_bcc
15.12.08
✎
20:46
|
(49) Читаю себе, читаю. Сирожа, все дела. Тут бац, и ссылка на майкрософт. Ну, думаю, вот и гейтсу теперь Осипов снится будет. Потом уже перевел взгляд, увидел автора поста. Вы так не пугайте:)
ЗЫ на (23): Вообще, такие вещи сперва стоит проверять. Аутлук хранит строки в UTF-16. Паршивая там экономия будет. |
|||
51
Гений 1С
гуру
16.12.08
✎
07:39
|
(50) Не скажи, на 20 000 контактах то, уже не 7 байт, а 14!
|
|||
52
Гений 1С
гуру
16.12.08
✎
07:39
|
к тому же с чего ты взял, что значения полей она хранит в UTF 16, возможно это текст хранится в этой кодировке
|
|||
53
Гений 1С
гуру
16.12.08
✎
07:40
|
Да и вообще, вопрос вроде бы простой, а ответ никто не знает, гыгыгы.
|
|||
54
Гений 1С
гуру
16.12.08
✎
08:11
|
Т.к. вопрос оказался сложнее, чем народ думал, задал еще и на SQL:
http://sql.ru/forum/actualthread.aspx?tid=623614&pg=-1 |
|||
55
kot_bcc
17.12.08
✎
16:11
|
(51) Какие 14 байт? 16 байт GUID как GUID, и 50 байт на GUID как строку. Еще раз - какие 14 байт какой экономии?
|
|||
56
kot_bcc
17.12.08
✎
16:12
|
(52) Достаточно открыть pst, чтобы в этом убедиться.
|
|||
57
kot_bcc
17.12.08
✎
16:14
|
+(55) "50 байт...на строку" + "если 25 символов в 36-ричной системе"
|
|||
58
kot_bcc
17.12.08
✎
16:18
|
+(56) И чем же отличается поле с 25-значным 36-ричным числом от поля текстового?
|
|||
59
rs_trade
17.12.08
✎
16:23
|
по сабжу, GUID это и есть число...
|
|||
60
Гений 1С
гуру
18.12.08
✎
09:08
|
(55) Как ты собираешься в аутлуке хранить GUID как GUID
(59) По сабжу меня интересовал порядок тетрад, чтобы преобразовать GUID в 16ричную форму, не надо умничать на пустом месте, буквоедство detected |
|||
61
Дуб
18.12.08
✎
09:10
|
(60) ещё один проснулся. Жениться тебе надо.
|
|||
62
kot_bcc
18.12.08
✎
09:25
|
(60) А догадаться слабо? Как 8 пар байт. Причем, в том же самом поле типа "Строка". И прежде чем кричать про нули - советую таки попробовать.
|
|||
63
H A D G E H O G s
18.12.08
✎
09:34
|
Че раскричались?
|
|||
64
kot_bcc
18.12.08
✎
09:36
|
(63):))))) Пытаемся представить, как будет выглядеть чудак, пытающийся позвонить по смартфону с 20000 контактов:)
|
|||
65
H A D G E H O G s
18.12.08
✎
09:39
|
Счаст напишу алгоритм
|
|||
66
H A D G E H O G s
18.12.08
✎
09:50
|
Погодь, чего то я не въехал, Гений. Тебе же просто надо число из 16-ричной системы в 10-тичную перевести. И все!
|
|||
67
H A D G E H O G s
18.12.08
✎
09:51
|
Ты откуда проблему на 60 постов высосал?
|
|||
68
Гений 1С
гуру
18.12.08
✎
09:53
|
(62) если я догадаюсь - я могу и ошибитьяс, а мне надо точно знать. Я этот код в библиотеку функций включаю
|
|||
69
Гений 1С
гуру
18.12.08
✎
09:54
|
(64) нолик лишний, у меня 2000 контактов
|
|||
70
kot_bcc
18.12.08
✎
10:01
|
(69) Внимательно курим пост (51)
|
|||
71
Гений 1С
гуру
18.12.08
✎
10:03
|
(70) Описка
|
|||
72
kot_bcc
18.12.08
✎
10:08
|
(68) Ладно. Говорю точнее. С точки зрения microsoft - гуид это 16 байт, которые можно представить также в виде 4 длинных слов (слева направо, индекс с 0) (т.н. "старое" представление), или в виде строки в нескольких вариантах, или в наборе из (длинное слово, короткое слово, короткое слово, 12 байт).
|
|||
73
kot_bcc
18.12.08
✎
10:08
|
Продолжать?
|
|||
74
kot_bcc
18.12.08
✎
10:15
|
Еще на (69) Человек, ковыряющий 2000 контактов, смотрится примерно также, как человек с 20000 контактов. Качесвтенный переход, вообще говоря, несколько ниже, как я понимаю.
|
|||
75
kot_bcc
18.12.08
✎
10:19
|
+(72) Я таки продолжу. Вопрос про разнообразие видов строк представления GUID почти тривиален. В контексте 1С это либо вид "{ХХХХХХХХ-ХХХХ-ХХХХ-ХХХХХХХХХХХХ}", либо какой-либо пользовательский (например - в 36-ричной системе).
|
|||
76
kot_bcc
18.12.08
✎
10:22
|
+(75) Но менять систему исчисления имеет смысл только ради экономии (losless-сжатия). Причем, необходимо учитывать, что существуют более эффективные способы такого сжатия. Об одном из которых я и говорю. Он очень прост. Достаточно перейти от представления в виде строки к представлению в виде набора чисел.
|
|||
77
kot_bcc
18.12.08
✎
10:26
|
+(76) 1. В (72) очепятка. "12 байт" -> "6 байт"
2. Совершенно необязательно следовать представлениям microsoft о группах в наборе GUID. Достаточно обеспечить взаимное преобразование. Что и было сделано (со строкой), например, в (16). |
|||
78
kot_bcc
18.12.08
✎
10:29
|
+(77) Ну, и, собсно, пример losless без строки. Представим GUID как 8 коротких слов (по 16 бит). Такое представление тривиально хранится в строковых переменных с кодировкой UTF-16 (т.е. везде, практически): одно слово - один символ, всего 8 символов.
|
|||
79
kot_bcc
18.12.08
✎
10:32
|
Осталось только пробразовать группы символов (по 4 16-ричных символа на каждое слово) из "классического" строкового представления GUID в числа и обратно.
|
|||
80
kot_bcc
18.12.08
✎
10:35
|
(66) Ему это число (128 бит в пределе) надо еще как-то засунуть в Outlook, в контакты. Да еще он хочет, чтобы покороче:)
|
|||
81
kot_bcc
18.12.08
✎
10:43
|
+(79) Здесь я вижу только один подводный камень. Все сказанное не проверялось на wince-девайсах. Если winmobile 5/6 - проблем с нулевыми символами быть не должно.
|
|||
82
Гений 1С
гуру
18.12.08
✎
10:54
|
(77) Меня интересует вопрос академически, а не "лишь бы сделать", лишь бы сделать не вопрос. Меня интересует, в каком именно порядке должны идти в результирующее число тетрады из ГУИД. Но вы не парьтесь, на партнерке мне уже дали правильный ответ.
По крайней мере в SQL и в функции JAVA guidtobyteArray результат одинаковый, значит можно считать его правильным. |
|||
83
bahmet
18.12.08
✎
11:05
|
(82) Гений 1С ! выруби своего дятла и вруби гения, а потом кури пост (41)+ кури свою найденую ссылку на сайте мелкомягких...
|
|||
84
Serg_1960
18.12.08
✎
11:29
|
Кину ссылку на Вики - может поможет разобраться с типами GUID'ов и зачем "переставляют" группы http://ru.wikipedia.org/wiki/GUID
|
|||
85
Гений 1С
гуру
18.12.08
✎
12:03
|
(83) Просто приведи пример.
(84) Хахаха. В этой статье строку: "Например, '22345200-abe8-4f60-90c8-0d43c5f6c0f6' соответствует шестнадцатеричному 128-битному числу 0x00523422E8AB604F90C80D43C5F6C0F6" написал я, по материалам разборки полетов с ГУИД на партнерке. Надеюсь, правильно. |
|||
86
Гений 1С
гуру
21.12.08
✎
11:40
|
Написал функцию конвертации, провел тесты:
ГУИД: 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 ГУИД восстановленный: 40bf67bb-742c-4355-abb9-dff6a60bd701 ГУИД равны: истина ГУИД: 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 ГУИД восстановленный: 22345200-abe8-4f60-90c8-0d43c5f6c0f6 ГУИД равны: истина Что забавно, функции конвертации числа в ГУИД и обратно оказались симметричными, т.е. практически идентичный код, наверное это как раз и говорит о том, что конвертация правильная: <pre> Функция УникальныйИдентификаторВЧисло(GUID) Экспорт //Назначение: Преобразует GUID в число //ДатаСоздания: 20080101 //Автор: Fixin //Тестирована: Да //Благодарность: Алмазов Петр //Ссылка: v8: Как перевести ГУИД в число и обратно? //Ссылка: http://partners.v8.1c.ru/forum/thread.jsp?id=640731 //Пример: // declare @a uniqueidentifier // set @a = '40bf67bb-742c-4355-abb9-dff6a60bd701' // print cast(@a as varbinary) // 0xBB67 BF40 2C74 5543 ABB9 DFF6 A60B D701 //Пример: // 40bf67bb-742c-4355-abb9-dff6a60bd701'.ToByteArray()= // 0xBB67 BF40 2C74 5543 ABB9 DFF6 A60B D701 // '22345200-abe8-4f60-90c8-0d43c5f6c0f6'.ToByteArray()= // 0x0052 3422 E8AB 604F 90C8 0D43 C5F6 C0F6 //Описание: // Конвертирует GUID в число с правильным расположением тетрад. // Можно быть уверенным что функции cast языка SQL и ToByteArray языка JAVA конвертируют так же. СтрокаGUID = СтрЗаменить(Строка(GUID),"-",""); //Первая восьмерка ч1 = Сред(СтрокаGUID, 1, 2); ч2 = Сред(СтрокаGUID, 3, 2); ч3 = Сред(СтрокаGUID, 5, 2); ч4 = Сред(СтрокаGUID, 7, 2); //Первая четверка ч5 = Сред(СтрокаGUID, 9, 2); ч6 = Сред(СтрокаGUID, 11, 2); //Вторая четверка ч7 = Сред(СтрокаGUID, 13, 2); ч8 = Сред(СтрокаGUID, 15, 2); //Хвост ч9 = Сред(СтрокаGUID, 17, 16); СтрGUID = ч4 + ч3 + ч2 + ч1 + ч6 + ч5 + ч8 + ч7 + ч9; Ч = бфМат.ПереводИзСистемыСчисленияВЧисло(СтрGUID, 16); Возврат Ч; КонецФункции Функция УникальныйИдентификаторИзЧисла(Ч) Экспорт //Назначение: Преобразует число в уникальный идентификатор //ДатаСоздания: 20081213 //Автор: Fixin //Тестирована: Да //Благодарность: Алмазов Петр //Ссылка: v8: Как перевести ГУИД в число и обратно? //Ссылка: http://partners.v8.1c.ru/forum/thread.jsp?id=640731 //Пример: // declare @a uniqueidentifier // set @a = '40bf67bb-742c-4355-abb9-dff6a60bd701' // print cast(@a as varbinary) // 0xBB67 BF40 2C74 5543 ABB9 DFF6 A60B D701 //Пример: // 40bf67bb-742c-4355-abb9-dff6a60bd701'.ToByteArray()= // 0xBB67 BF40 2C74 5543 ABB9 DFF6 A60B D701 // '22345200-abe8-4f60-90c8-0d43c5f6c0f6'.ToByteArray()= // 0x0052 3422 E8AB 604F 90C8 0D43 C5F6 C0F6 //Описание: // Конвертирует GUID в число с правильным расположением тетрад. // Можно быть уверенным что функции cast языка SQL и ToByteArray языка JAVA конвертируют так же. СтрокаGUID = бфСтроки.ДобавитьНачСимвол(бфМат.ПереводЧислаВСистемуСчисления(Ч, 16), 32, "0"); //Первая восьмерка ч1 = Сред(СтрокаGUID, 1, 2); ч2 = Сред(СтрокаGUID, 3, 2); ч3 = Сред(СтрокаGUID, 5, 2); ч4 = Сред(СтрокаGUID, 7, 2); //Первая четверка ч5 = Сред(СтрокаGUID, 9, 2); ч6 = Сред(СтрокаGUID, 11, 2); //Вторая четверка ч7 = Сред(СтрокаGUID, 13, 2); ч8 = Сред(СтрокаGUID, 15, 2); //Хвост ч9 = Сред(СтрокаGUID, 17, 4); ч10 = Сред(СтрокаGUID, 21, 12); СтрGUID = ч4 + ч3 + ч2 + ч1 + "-" + ч6 + ч5 + "-" + ч8 + ч7 + "-" + ч9 + "-" + ч10; Возврат Новый УникальныйИдентификатор(СтрGUID); КонецФункции </pre> |
|||
87
Балабес
21.12.08
✎
12:35
|
ГУИД для лохов, даже 1С использует binary(16)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |