Имя: Пароль:
1C
 
Число в 4 байта
0 bestuzhev
 
10.06.10
17:53
Есть Число, например 19553 его как-то надо записать в 4 байта.
Например
19553 в 2ичной системе 0000000000000000100110001100001 потом это добро поделить на байты 0000000 00000000 01001100 01100001 и каждый байт записать в строку в виде символа в итоге у этого числа получится следующая строка "  La", то есть первые 2 байта нули в третьем 01001100 что соответствует L а в 4м 01100001 что соответствует a.
Как такой перевод реализовать в 1с 8.1?
1 Defender aka LINN
 
10.06.10
17:54
Ну, так и реализовывай, какие проблемы?
2 Fram
 
10.06.10
17:59
главное - весь алгоритм знает, а что делать с алгоритмом не знает ))
3 YoungMan
 
10.06.10
18:01
(0) а смысл изначально в чем?
4 shuhard
 
10.06.10
18:05
(0)[Как такой перевод реализовать в 1с 8.1]
Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   Математика=Скрипт.Eval("Math");
   Ат=Математика.pow(2,Цел(Лог(а)/Лог(2)))+1; - и фигарь свои двоичные сдвиги  и XOR
5 bestuzhev
 
10.06.10
18:06
(1)(2) Какими функциями переводить из одного вида в другой.
(3) Формат выгрузки цен (цены в копейках).
6 YoungMan
 
10.06.10
18:07
(3) а где у тебя должно быть 4 байта? в какой системе?
7 bestuzhev
 
10.06.10
18:11
(6) Есть число например что приводил я 19553, оно занимает 2 байта, 2 байта это 2 символа из ascii, каждый байт свой символ. А формат файла в который все это нужно записать (и из которого все это будет загружаться предполагает что число должно писаться в 4 байта) то есть в файл пишем два символа из ascii с 00000000, а потом два символа которые соответствуют числу 19553.
8 dk
 
10.06.10
18:15
(7) 8-ка в уникоде, а не в асци
9 bestuzhev
 
10.06.10
18:16
(8) И.
10 dk
 
10.06.10
18:17
там символы по 2 байта
11 dk
 
10.06.10
18:17
или в чем поблема?
12 bestuzhev
 
10.06.10
18:18
Внимательно прочитай (0) и (7)
13 Said_We
 
10.06.10
18:18
Так много цен передаёшь что не влазиют в файл и надо уменьшить разрядность клонки? Или куда передаёшь - там число, а не строка символов?
14 bestuzhev
 
10.06.10
18:19
(13) У файла есть специальный формат, в котором цена должна занимать 4 байта, то есть при загрузке считывается 4 байта и получается число.
15 Said_We
 
10.06.10
18:21
(14) Ну или функцию внешнюю для перевода используй?
Или сам 19553/16 и переводишь в 16-ую систему.
16 dk
 
10.06.10
18:22
т.е. не получается записать символ с кодом 0?
17 bestuzhev
 
10.06.10
18:23
Если кто еще не понял суть проблемы, то откройте калькулятор в винде, переведите его в инженерный режим, выберите Bin и 4 байта и введите 11111111111000000000000000000000
потом нажмите Dec получится 4292870144
потом Hex и получите FFE00000 вот эти 4 байта и надо записать в текстовый файл, побайтно.
18 bestuzhev
 
10.06.10
18:23
(16) и это тоже
19 bestuzhev
 
10.06.10
18:24
Вернее не в текстовый файл а просто в файл.
20 Said_We
 
10.06.10
18:25
"  La" - это текстовый файл. А тебе как раз нужно просто 16-е число.
21 YoungMan
 
10.06.10
18:25
(7) А в чем проблема как таковая? Если у тебя произвольный формат файла получается??? Ты же сам его формируешь, так еще и сам его загружать после этого будешь...
22 Said_We
 
10.06.10
18:26
Когда ты это 16-е число запихнешь в файл, то и получиль строку "  La" при просмотре в текстовом редакторе или ХХХХh в HEX редакторе.
23 bestuzhev
 
10.06.10
18:26
(20) Открой любой файл Блокнотом и увидишь текст.
24 bestuzhev
 
10.06.10
18:27
(22) Можно подробнее.
25 Rie
 
10.06.10
18:27
(17) Так а проблема-то в чём? 4 байта в файл записать?
26 YoungMan
 
10.06.10
18:28
(22)(24) только при этом максимальное значение будет 65535
27 bestuzhev
 
10.06.10
18:30
(24) Ага типа того.
28 YoungMan
 
10.06.10
18:34
(27) Вообще же конечно максимальное значение которое дает 16-я система при 4-байтном коде: FFFFFFFF, т.е. 4`294`967`295
29 Rie
 
10.06.10
18:35
(27) Байты в каком порядке должны идти?
30 bestuzhev
 
10.06.10
18:35
(28) Вот. Так мне и надо представить число в 4-байтном коде и записать эти 4 байта в файл.
31 YoungMan
 
10.06.10
18:37
(30) только я еще раз прошу ответить на (21)
32 bestuzhev
 
10.06.10
18:38
(21) Нет не произвольный.
33 Ковычки
 
10.06.10
18:38
Фигня какая то
34 bestuzhev
 
10.06.10
18:38
(21) Был бы мой формат я бы не лучился...
35 YoungMan
 
10.06.10
18:40
(34) но если ты сам определяешь в каком виде будет формироваться файл (ты же в (0) вообще некую шифровку предлагал), то как опять же без переработки будет этот файл обрабатываться на приемнике?
36 Rie
 
10.06.10
18:41
(34) Ты чем его пишешь-то?
И в каком порядке у тебя байты числа должны идти?
37 Ковычки
 
10.06.10
18:41
пипец задача яйца выеденого не стоит
38 bestuzhev
 
10.06.10
18:42
39 bestuzhev
 
10.06.10
18:42
Конкретно Таблица товаров бинарный вид Goods.bin
40 Ковычки
 
10.06.10
18:42
задача яйца выеденого не стоит
41 bestuzhev
 
10.06.10
18:43
(40) Ну так реши ее.
42 Fram
 
10.06.10
18:45
ну не умеет 1С с бинарниками работать.. пользуйся сторонними объекатми.. на vbscript попробуй
43 shuhard
 
10.06.10
18:46
(42) в (4) предложено
ТС кроме флюда некуя не умееет
44 Rie
 
10.06.10
18:47
(39) В этом файле сказано, что имеется программка GoodsConverter, которая способна превратить goods.txt в goods.bin
Если не умеешь писать двоичные файлы - то что мешает воспользоваться этим несомненно полезным инструментом?
45 bestuzhev
 
10.06.10
18:50
(44) Да не хотелось чем-то еще пользоваться, придется в в текстовом грузить. Просто текстовый грузится раз в 40 медленнее.
46 НетуаНадо
 
10.06.10
18:51
ну а деление на два слабо в цикле использовать просто??
47 НетуаНадо
 
10.06.10
18:51
и проверять на цело делиться или нет
48 dk
 
10.06.10
18:53
49 Rie
 
10.06.10
18:57
(46) Не надо на 2. Надо на 256. Или даже на 65536
50 Ковычки
 
10.06.10
18:58
51 НетуаНадо
 
10.06.10
19:01
(46) тебе поможет
52 bestuzhev
 
10.06.10
19:07
(50) ну а как из 11111111 или FF получить символ и записать его в файл?
53 Rie
 
10.06.10
19:12
(52) А зачем тебе двоичный или шестнадцатеричный _вид_, если у тебя есть _байты_?
54 bestuzhev
 
10.06.10
19:26
(53) В смысле байты. У меня есть число.
55 Rie
 
10.06.10
19:30
(54) Есть число (например, оно называется Цена). Это число состоит из 4 байтов:
(Цена%256), (Цел(Цена/256)%256), (Цел(Цена/65536)%256), (Цел(Цена/16777216)).
(Или в каком порядке тебе они нужны?)
56 Rie
 
10.06.10
19:35
(45) И зачем тебе _грузить_ текстовый файл, если у тебя есть программка-_конвертер_, которая создаст .bin?
57 Ковычки
 
10.06.10
19:35
Ты паразитируешь что ли ?

//*******************************************
Процедура Сформировать()
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="javascript";
   ФСО=СоздатьОбъект("Scripting.FileSystemObject");
   Файл=КаталогПользователя()+"ЗадачаНеСтоитНиЧего.bin";
   Файл=ФСО.OpenTextFile(Файл,2,-1);
   Скрипт.AddObject("Файл",Файл);
   Стр=Скрипт.Eval("new Number(19553)");
   Стр=Прав("00000000"+Стр.toString(16),8);
   Для Сч=0 По 3 Цикл
       Скрипт.Eval("Файл.Write(String.fromCharCode(Number(0x"+Сред(Стр,Сч*2+1,2)+")))");
   КонецЦикла;
   Файл.Close();
КонецПроцедуры


только скорее всего в обратном порядке и не стоит джабу использовать (будут проблемы)
58 Ковычки
 
10.06.10
19:56
//*******************************************
Процедура Сформировать()
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="vbscript";
   ФСО=СоздатьОбъект("Scripting.FileSystemObject");
   Файл=КаталогПользователя()+"ЗадачаНеСтоитНиЧего.bin";
   Файл=ФСО.OpenTextFile(Файл,2,-1);
   Скрипт.AddObject("F",Файл);
   Че=3435973836;
   Если Че > 2147483647 Тогда
       Че=Че-4294967296;
   КонецЕсли;
   Стр=Скрипт.Eval("hex("+(Че)+")");
   Стр=Прав("00000000"+Стр,8);
   Сообщить(Стр);
   Для Сч=0 По 3 Цикл
       Сообщить(Сред(Стр,Сч*2+1,2));
       Скрипт.Eval("F.Write(chr(&h"+Сред(Стр,Сч*2+1,2)+"))");
   КонецЦикла;
   Файл.Close();
КонецПроцедуры
59 bestuzhev
 
10.06.10
20:07
Ковычки +100 Спасибо.
60 Ковычки
 
10.06.10
20:09
порядок байт скорее обратный приведенному
61 Said_We
 
11.06.10
10:51
Порядок байт - сначала младшие разряды, потом старшие.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший