Имя: Пароль:
1C
1С v8
Преобразование Двоичных данных в Биты
,
0 web_profiler
 
16.01.16
19:19
есть ДвДанные 21 - теперь эту штуку мне в биты надо разложить
т.е. чтоб получить 10000100

тем, кому интересно наф... мне биты - смотрим сюда
http://iscr.ru/1452939073/

пункт <ADD>
1 Музон Хиггса
 
16.01.16
19:23
Что такое ДвДанные 21?
2 web_profiler
 
16.01.16
19:23
Двоичные данные
3 Музон Хиггса
 
16.01.16
19:29
А... Ну тогда 11000100, 11100010, 11000100, 11100000, 11101101, 11101101, 11111011, 11100101, 100000, 110010, 110001.
4 web_profiler
 
16.01.16
19:30
(3) МОЛОДЕЦ!!!, Садись - 2
5 Музон Хиггса
 
16.01.16
19:31
(4) Стой один.
6 web_profiler
 
16.01.16
19:34
H A D G E H O G s,помоги еще чуток, плиз
7 web_profiler
 
16.01.16
19:35
нашел такую функцию, но что-то она мне не очень нравится
Функция преобразования(Н)
   О="";    
    Если Н="0" ТОгда
        о="0";
    ИначеЕсли Н="1" Тогда
        о="1"
    Иначе
        ПОка число(н)<>1 Цикл
            Х=Цел(Н/2);
            У=Н-2*Х;
            О=О+Строка(У);
            Н=Х
        конецЦикла;
        
    О=Строка(Х)+О;    
    КонецЕсли;
Возврат О    
КонецФункции
8 web_profiler
 
16.01.16
19:36
кстати H A D G E H O G s, Вы кого-то похвалили за нее вот тут
v8: декодировать base64 в двоичные данные?
9 web_profiler
 
16.01.16
19:37
при 20 получаю 10010
хотя должно получиться 00000100
10 web_profiler
 
16.01.16
19:40
Есть кто-нибудь кроме (3)
11 GenV
 
16.01.16
19:42
(9) если 20 десятичное, то должно получиться "1 0100" (16+4), если 16-ричное, то "10 0000" (32). Откуда твое взялось?
Можешь на калькуляторе в windows проверить.
12 web_profiler
 
16.01.16
19:47
(11) ссори 16-ричное и перевернутое
13 GenV
 
16.01.16
19:49
(12) Алгоритм для десятичного - преобразуй в десятичное
14 web_profiler
 
16.01.16
19:49
(11) вообще пользуюсь
http://www.scadacore.com/field-applications/programming-calculators/online-hex-converter
20 в binary 00000100
15 web_profiler
 
16.01.16
19:55
(13) СПАСИБО, преобразовал в десятичное, и алгоритмом получил 100000 - то что надо
16 Музон Хиггса
 
16.01.16
19:58
(15) 00000100 ещё в десятичное преобразуй.
17 Serg_1960
 
16.01.16
20:28
18 GROOVY
 
16.01.16
20:36
Вот и пришло поколение, которое самостоятельно из одной системы в другую не может значение перевести...
19 Serg_1960
 
16.01.16
20:48
(не совсем в тему)

У меня есть знакомый, который мог оперировать (арифметический операции) с пяти/шести-значными числами. У меня только с тремя/четырьмя разрядами получалось и то с трудом. Как-то не удержался и спросил его "В чём секрет?" Ответ просто убил меня:

"Перевожу в уме в двоичные числа и все сложные операции в десятеричной системе превращаются в простые сдвиг и суммирование двоичной системы" Вот так настоящие программисты считают в уме :)
20 Рэйв
 
16.01.16
20:52
(18)да ладно. Оно и раньше то не очень могло:-)
21 Asmody
 
16.01.16
21:04
это же школьная информатика, 8-9й класс.
22 web_profiler
 
16.01.16
21:06
GROOVY - обижаешь, ну не ужели каждый день с ты с битами и байтами и бинарными файлами работаешь?
А если работаешь то когда ты все успеваешь?
и курсы вести и байты в биты переводить.
23 Zamestas
 
16.01.16
21:28
(22) Если человек не может перевести данные из одной системы счисления в другую то ему нечего делать в программировании. Т.е. вообще нечего.
24 H A D G E H O G s
 
16.01.16
21:29
(23) Я не умею переводить.
25 web_profiler
 
16.01.16
21:30
вот вы все такие умные а ни один из алгоритмов - не рабочий
26 web_profiler
 
16.01.16
21:33
Согласно описания, пункт <ADD>
при числе 10 (HEX) - должен получить 00001000
GROOVY - а теперь покажи класс
27 web_profiler
 
16.01.16
21:33
тут все четко видно - четвертый бит в Истине
http://www.scadacore.com/field-applications/programming-calculators/online-hex-converter
28 web_profiler
 
16.01.16
21:34
тут же, из (17) -
получаю 1010
29 web_profiler
 
16.01.16
21:35
че GROOVY? ну покажи мастер класс - признаю себя великим лузером
30 web_profiler
 
16.01.16
21:36
сделай из 10 (HEX) - 00001000
31 Drac0
 
16.01.16
21:36
(24)Ну, вон из профессии, чо уж...
32 strange2007
 
16.01.16
21:38
Хм, однако. Дочке в 6-м классе объяснял как решать задачи по переводу дробных чисел из разных систем исчисления в разные. Но там школьная программа, поэтому двоичных примеров не было, в основном больше десяточки было.
Понятно, что нифига не помощь, но может стоит школу подвспомнить? Я бы так и поступил
33 web_profiler
 
16.01.16
21:38
Павел, Вы тут?
34 GROOVY
 
16.01.16
21:39
Прошу прощения, судя по всему задел и обидел. Не имел это целью.

По поводу азов информатики и арифметики: http://inf.e-alekseev.ru/text/Schisl_perevod.html
35 web_profiler
 
16.01.16
21:39
Павел, немного есть
36 web_profiler
 
16.01.16
21:39
но все же, давайте решим ПРАВИЛЬНО задачку
37 web_profiler
 
16.01.16
21:40
как на курсах
38 web_profiler
 
16.01.16
21:43
у меня 2 алгоритма, по сути получаю одно и тоже (1010)
Что не так? в чем трабл? должно быть 00001000
вот они

Функция ДвоичноеЧисло(Х)  //число в биты
    Возврат ?(Х<2,""+Х,ДвоичноеЧисло(Цел(Х/2))+?(Х%2,"1","0"));
КонецФункции

Функция преобразования(Н)  //десятичное в биты
   О="";    
    Если Н="0" ТОгда
        о="0";
    ИначеЕсли Н="1" Тогда
        о="1"
    Иначе
        ПОка число(н)<>1 Цикл
            Х=Цел(Н/2);
            У=Н-2*Х;
            О=О+Строка(У);
            Н=Х
        конецЦикла;
        
    О=Строка(Х)+О;    
    КонецЕсли;
Возврат О    
КонецФункции
39 Zamestas
 
16.01.16
21:45
(24) Как это клеится с (8)?
(36) Тебе реально лениво написать 16 если в кривом, но рабочем алгоритме?
40 web_profiler
 
16.01.16
21:49
(39) когда не понимаешь сути - трудно написать, поэтому и прошу помощи
41 H A D G E H O G s
 
16.01.16
21:56
Афтор, держи

Функция БитВключен(Знач Данные,НомерБита)
    Для Счетчик=0 По 7 Цикл
        Степень=7-Счетчик;
        Вычитаемое=Pow(2,Степень);
        ТекущийБитВключен=Ложь;
        Если Данные>=Вычитаемое Тогда
            Данные=Данные-Вычитаемое;
            ТекущийБитВключен=Истина;
        КонецЕсли;
        Если Степень=НомерБита Тогда
            Возврат ТекущийБитВключен;
        КонецЕсли;
    КонецЦикла;
КонецФункции


Процедура КнопкаВыполнитьНажатие(Кнопка)
    Данные=21;
    СоответствиеСтатусов=Новый Соответствие;
    СоответствиеСтатусов.Вставить(3,"Штучный товар");
    СоответствиеСтатусов.Вставить(4,"Разрешить продажу");
    СоответствиеСтатусов.Вставить(5,"Разрешить подсчет количества");
    СоответствиеСтатусов.Вставить(6,"Одиночная продажа запрещена");
    Для Счетчик=3 По 6 Цикл
        Если БитВключен(Данные,Счетчик) Тогда
            Сообщить(СоответствиеСтатусов.Получить(Счетчик));
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры
42 GenV
 
16.01.16
21:57
В стандартном windows есть калькулятор. Открываешь его и ставишь "Вид"- "Программист". И нефиг лазить по всяким сайтам, если и так все есть ...

В алгоритме О=Строка(У)+О
43 H A D G E H O G s
 
16.01.16
21:58
(39) Ну, я взял и посмотрел википедию.
44 Кирпич
 
16.01.16
21:58
(40) ты реально тупой. ты же уже пользовался сегодня универсальной функцией отсюда http://my1c-archive.narod.ru/knowhow/uni_conv.html

какого художника ты опять воду мутишь?
45 web_profiler
 
16.01.16
22:37
(44) походу ты тупой, возьми отладь чтоб получилось так:
10 = 00001000
46 web_profiler
 
16.01.16
22:38
любую из этих функций
47 web_profiler
 
16.01.16
22:38
10 это в HEX
48 Кирпич
 
16.01.16
22:45
(45) 00001000 это вообще то 08, а не 10
49 H A D G E H O G s
 
16.01.16
22:45
(47) Ты мой вариант посмотрел?
50 GenV
 
16.01.16
22:49
Результат10 = Из_Любой_В_10("10", 16);
Результат2 = Из_10_В_Любую(Результат10, 2);
Результат2 = "10000";
51 Кирпич
 
16.01.16
22:50
(50) он уже сегодня это проходил. не дошло нифига.
52 web_profiler
 
16.01.16
22:50
(49) не работает
53 web_profiler
 
16.01.16
22:51
(51) ты только болтать умеешь?
покажи как надо
при чем тут 08 вообще?
54 Кирпич
 
16.01.16
22:51
(53) в (50) написано как надо
55 web_profiler
 
16.01.16
22:53
(54) я уже проверил, а от тебя никакой пользы - только оскарбления
56 web_profiler
 
16.01.16
22:54
(50) СПАСИБО тебе огромное
57 H A D G E H O G s
 
16.01.16
22:54
(52) Что значит
"не работает"?
Для 21 он вывел:
Разрешить продажу
58 Кирпич
 
16.01.16
22:55
(55) я ж тебе ссылки давал на функции. забыл чтоли.
59 web_profiler
 
16.01.16
22:55
(54) посмотри по этой теме, никакой пользы ни строки кода
60 web_profiler
 
16.01.16
22:56
(58) дело было в правильном расставлении систем
Результат10 = Из_Любой_В_10("10", 16);
Результат2 = Из_10_В_Любую(Результат10, 2);

ты же про это ни слова ни сказал
61 Кирпич
 
16.01.16
22:57
(60) так мы же с тобой сегодня это проходили. ставили 16 вместо 36. забыл?
62 web_profiler
 
16.01.16
22:57
(57) можете проверить по числу 50
должно получиться
"запретить продажу"
"одиночная продажа разрешена"
63 web_profiler
 
16.01.16
22:58
(61) да это было в байтах - а эта тема про один байт, который надо разбить на биты и их анализировать
64 Кирпич
 
16.01.16
22:59
(63) мля. я не могу ))))))
65 web_profiler
 
16.01.16
23:00
(61) ок, еще одна проблемка - ну так чтоб "добить" :) вообще

HEX в ASCII
66 Кирпич
 
16.01.16
23:00
(63) ты откуда такой? у вас в школе информатика была вообще? (есть такая лженаука)
67 web_profiler
 
16.01.16
23:02
никогда не работал с системами исчесления
(66) есть 48 байт в HEX - их надо в ASCII перевести
как?
68 Кирпич
 
16.01.16
23:04
(67) не знаю. может функция Символ(<КодСимвола>) поможет как-то.
69 Кирпич
 
16.01.16
23:11
наверное надо слепить строку из Символ(<КодСимвола>), а потом перекодировать из ANSI
70 web_profiler
 
16.01.16
23:13
(69) пробую
71 web_profiler
 
16.01.16
23:23
может из данной строки преобразовывать?
0s7CwNAgMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
72 web_profiler
 
16.01.16
23:25
в HEX это так выглядит
D2 CE C2 C0 D0 20 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
73 Кирпич
 
16.01.16
23:44
короче ищи в интернете функцию перекодировки из win1251 в юникод. если не найдешь, то я тебе её завтра сделаю. я не знаю как в 1с перекодировать. может как то через файл, но это изврат.
74 web_profiler
 
16.01.16
23:48
(73) через файл сделал - но это явно извращение
75 Злобный Фей
 
17.01.16
00:01
(19)
Бгг. Сначала считаем ноги, потом делим на 4
76 Serg_1960
 
17.01.16
00:20
web_profiler, ты был невнимателен - я в ссылке указал функцию перевода из DEC в BIN (выше по тексту об этом говорили). Для чего указал? Ну, например для этого:

Функция ДвоичноеЧисло(Х)
    Возврат ?(Х<2,""+Х,ДвоичноеЧисло(Цел(Х/2))+?(Х%2,"1","0"));
КонецФункции

Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    Строка16 = СтрЗаменить("D2 CE C2 C0 D0 20 31 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00", " ", "");
    Разрядность = СтрДлина(Строка16);
    ЧислоDEC = 0;
    Для Позиция = 1 По Разрядность Цикл
        ЧислоDEC = ЧислоDEC + Найти("123456789ABCDEF",Сред(Строка16,Позиция,1))*Pow(16,Разрядность - Позиция);
    КонецЦикла;
    СтрокаBIN = ДвоичноеЧисло(ЧислоDEC);
    Сообщить(СтрокаBIN);
    Возврат;
КонецПроведуры
77 Serg_1960
 
17.01.16
00:23
Упс, "КонецПроцедуры" в последней строке разумеется :( 1С нет на компе, писал "по памяти", напоследок расслабился :)
78 web_profiler
 
17.01.16
00:29
спасибо, пробую
79 web_profiler
 
17.01.16
00:33
(76) это ответ
110100101100111011000010110000001101000000100000001100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
80 web_profiler
 
17.01.16
00:33
а требуется "ТОВАР 1"
81 web_profiler
 
17.01.16
00:39
пробую так

    Стрим = Новый COMОбъект("Adodb.Stream");
    Стрим.Type = 2;
    Стрим.Mode= 3;
    Стрим.charset="utf-16";
    //Стрим.charset="windows-1251";

    Стрим.Open();
    Стрим.WriteText(Стр);
    Стрим.Position=0;
    //Стрим.SaveToFile("c:\unicode.txt",2);
    //Стрим.Close();
    Стрим.charset="windows-1251";
    Рез=Стрим.ReadText(-1);
    Стрим.Close();
82 Кирпич
 
17.01.16
00:43
на вот. дешево, удобно и практично :) надеюсь принцип понятен

&НаКлиенте
Функция Символ1251(Симв)
Символы1251 = Новый Соответствие;
Символы1251.Вставить(192,"А");Символы1251.Вставить(224,"а");
Символы1251.Вставить(193,"Б");Символы1251.Вставить(225,"б");
Символы1251.Вставить(194,"В");Символы1251.Вставить(226,"в");
Символы1251.Вставить(195,"Г");Символы1251.Вставить(227,"г");
Символы1251.Вставить(196,"Д");Символы1251.Вставить(228,"д");
Символы1251.Вставить(197,"Е");Символы1251.Вставить(229,"е");
Символы1251.Вставить(168,"Ё");Символы1251.Вставить(184,"ё");
Символы1251.Вставить(198,"Ж");Символы1251.Вставить(230,"ж");
Символы1251.Вставить(199,"З");Символы1251.Вставить(231,"з");
Символы1251.Вставить(200,"И");Символы1251.Вставить(232,"и");
Символы1251.Вставить(201,"Й");Символы1251.Вставить(233,"й");
Символы1251.Вставить(202,"К");Символы1251.Вставить(234,"к");
Символы1251.Вставить(203,"Л");Символы1251.Вставить(235,"л");
Символы1251.Вставить(204,"М");Символы1251.Вставить(236,"м");
Символы1251.Вставить(205,"Н");Символы1251.Вставить(237,"н");
Символы1251.Вставить(206,"О");Символы1251.Вставить(238,"о");
Символы1251.Вставить(207,"П");Символы1251.Вставить(239,"п");
Символы1251.Вставить(208,"Р");Символы1251.Вставить(240,"р");
Символы1251.Вставить(209,"С");Символы1251.Вставить(241,"с");
Символы1251.Вставить(210,"Т");Символы1251.Вставить(242,"т");
Символы1251.Вставить(211,"У");Символы1251.Вставить(243,"у");
Символы1251.Вставить(212,"Ф");Символы1251.Вставить(244,"ф");
Символы1251.Вставить(213,"Х");Символы1251.Вставить(245,"х");
Символы1251.Вставить(214,"Ц");Символы1251.Вставить(246,"ц");
Символы1251.Вставить(215,"Ч");Символы1251.Вставить(247,"ч");
Символы1251.Вставить(216,"Ш");Символы1251.Вставить(248,"ш");
Символы1251.Вставить(217,"Щ");Символы1251.Вставить(249,"щ");
Символы1251.Вставить(218,"Ъ");Символы1251.Вставить(250,"ъ");
Символы1251.Вставить(219,"Ы");Символы1251.Вставить(251,"ы");
Символы1251.Вставить(220,"Ь");Символы1251.Вставить(252,"ь");
Символы1251.Вставить(221,"Э");Символы1251.Вставить(253,"э");
Символы1251.Вставить(222,"Ю");Символы1251.Вставить(254,"ю");
Символы1251.Вставить(223,"Я");Символы1251.Вставить(255,"я");
Если (Симв >= 192) И (Симв <= 255) Тогда    
    Возврат Символы1251.Получить(Симв);
Иначе
    Возврат Символ(Симв);
КонецЕсли;
КонецФункции

&НаКлиенте
Процедура Команда1(Команда)
    Стр = Символ1251(Из_Любой_В_10("CC",16)) + Символ1251(Из_Любой_В_10("D3",16)) + Символ1251(Из_Любой_В_10("CA",16));
    Сообщить(Стр);
КонецПроцедуры
83 Кирпич
 
17.01.16
00:45
про букву Ё забыл. у неё код меньше 192
84 web_profiler
 
17.01.16
00:46
(82) спасибо огромное, код символа из 16-рич.. я получал, по таблице видел, что слово получается, но я никак не думал, что потребуется соответствиями находить

я читал, что Adodb.Stream может помочь
85 Кирпич
 
17.01.16
00:48
только всю фигню типа "Символы1251.Вставить" выкинь за пределы функции чтобы не тормозило
86 web_profiler
 
17.01.16
00:49
(85) уже
87 web_profiler
 
17.01.16
01:13
(85) все работает, спасибо тебе Человеческое ОгромеННОЕ
88 Кирпич
 
17.01.16
01:26
(87) вот так еще красивее и без соответствий

Функция Символ1251(Симв)
Если ((Симв >= 192) И (Симв <= 255)) Тогда    
    Если  Симв = 168 Тогда возврат "Ё" КонецЕсли;
    Если  Симв = 184 Тогда возврат "ё" КонецЕсли;
    Возврат Символ(Симв + 848);
Иначе    
    Возврат Символ(Симв);
КонецЕсли;
КонецФункции
89 Кирпич
 
17.01.16
01:34
Тьфу. Опять ё нитуда вставил. Про ё в начало поставь.
90 web_profiler
 
17.01.16
02:15
ок, спс
91 Музон Хиггса
 
17.01.16
11:37
(22) Зачем каждый? Достаточно одного раза.
92 web_profiler
 
17.01.16
13:58
(91) тебе чего делать нечего? сядь за комп СКД поизучай
93 Креатив
 
17.01.16
14:16
Так и не понял, почему двоичные данные в текстовом формате?
94 Кирпич
 
17.01.16
14:26
(93) потому что это делается в 1с, тупым и жадным одинесником.
95 web_profiler
 
17.01.16
14:34
обозвали, нахамили
или просто ирония?
96 Кирпич
 
17.01.16
14:43
(95) да какая ирония. Просто факты.
97 Музон Хиггса
 
17.01.16
17:20
(92) Иди домены впаривай. Нуб.