<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBScript: Закодировать двоичные данные]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=7166</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=7166&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBScript: Закодировать двоичные данные».]]></description>
		<lastBuildDate>Tue, 08 May 2012 17:57:09 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBScript: Закодировать двоичные данные]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60081#p60081</link>
			<description><![CDATA[<p>Тогда так:<br />str = str &amp; chr(55) &amp; chr(00)<br />вместо - str &amp; chr(37) &amp; chr(00)<br />Буду тестировать. Спасибо, не догадался что так можно.</p>]]></description>
			<author><![CDATA[null@example.com (2vv)]]></author>
			<pubDate>Tue, 08 May 2012 17:57:09 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60081#p60081</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Закодировать двоичные данные]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60079#p60079</link>
			<description><![CDATA[<div class="quotebox"><cite>2vv пишет:</cite><blockquote><p>Спасибо. <br />Как записать в тектовый файл я осилил. Но дело в том что текстовый файл не совсем подходит, так как 37 00 и 14 00 - это байты. Как в VBScript писать в файл байты - не нашел. Можно потом HEX редактором воспользоваться, но это не то.</p></blockquote></div><p>функция <strong>chr()</strong> возвращает символ с указанным ascii кодом. Т.е. <strong>str = str &amp; chr(37) &amp; chr(00)</strong> вместо <strong>str = str &amp; &quot;3700&quot;</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Tue, 08 May 2012 14:44:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60079#p60079</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Закодировать двоичные данные]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=60078#p60078</link>
			<description><![CDATA[<p>Спасибо. <br />Как записать в тектовый файл я осилил. Но дело в том что текстовый файл не совсем подходит, так как 37 00 и 14 00 - это байты. Как в VBScript писать в файл байты - не нашел. Можно потом HEX редактором воспользоваться, но это не то.</p>]]></description>
			<author><![CDATA[null@example.com (2vv)]]></author>
			<pubDate>Tue, 08 May 2012 14:14:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=60078#p60078</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Закодировать двоичные данные]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59969#p59969</link>
			<description><![CDATA[<div class="codebox"><pre><code>for i=0 to 65535
   msgbox f(&quot;A1&quot; &amp; DecToHex(i))
next

Function GetHexDigit(x)
   if x&lt;10 then
      GetHexDigit = cStr(x)
   else
      GetHexDigit = Chr(Asc(&quot;A&quot;)+x-10)
   end if
End Function

Function DecToHex(ByVal x)
   dim i
   DecToHex = &quot;&quot;
   for i=1 to 4
      DecToHex = GetHexDigit(x mod 16) &amp; DecToHex
	  x = x \ 16
   next
End Function

Function f(x)
   dim i, j, str, num
   num = array(cInt(&quot;&amp;H&quot; &amp; Mid(x, 3, 2)), cInt(&quot;&amp;H&quot; &amp; Mid(x, 5, 2)), cInt(&quot;&amp;H&quot; &amp; Mid(x, 1, 2)))
   num(2) = num(0) xor num(1) xor num(2)
   str = &quot;&quot;
   for i=0 to 2
      num(i) = ((num(i) and 85)*2) or ((num(i)\2) and 85)
      num(i) = ((num(i) and 51)*4) or ((num(i)\4) and 51)
      num(i) = ((num(i) and 15)*16) or ((num(i)\16) and 15)
      for j=1 to 8
         if num(i) and 1 then
            str = str &amp; &quot;3700&quot;
         else
            str = str &amp; &quot;1400&quot;
         end if
         num(i) = num(i) \ 2
      next
   next
   f = str
End Function</code></pre></div><p>Осталось только в файл записать.</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Fri, 04 May 2012 12:59:59 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59969#p59969</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Закодировать двоичные данные]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59960#p59960</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Что из себя представляет задача? Ему есть реальное применение? Или это учебный материал?</p></blockquote></div><p>Да, это для реального применения. Есть одна идея. От одного девайса был утерян пульт ДУ. Пульт ДУ можно собрать на микроконтроллере. Но вот прошивать его надо зная коды кнопок. Есть софт который может генерировать пакеты для ДУ и собирать прошивку для контроллера. Настройки пульта(коды) хранятся в файле, формат известен. Вот я хочу скриптом создать файл с кодами и опробовтаь их. Рабочие комбинации пойдут в прошивку. Диапазон довольно большой, вручную набирать слишком накладно. Так как от программирования довольно далек решил попробовать реализовать на VBScript, с которым иногда сталкиваюсь.</p>]]></description>
			<author><![CDATA[null@example.com (2vv)]]></author>
			<pubDate>Fri, 04 May 2012 11:32:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59960#p59960</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Закодировать двоичные данные]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59949#p59949</link>
			<description><![CDATA[<div class="quotebox"><cite>2vv пишет:</cite><blockquote><p>Насколько я понимаю вставить нужно в конец функции.</p></blockquote></div><p>Все верно.</p><p>Только она здесь не нужна. Все делается циклом из примера коллеги <strong>Александр_</strong><br /></p><div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>for j=1 to 8<br />...</p></blockquote></div><p>Что из себя представляет задача? Ему есть реальное применение? Или это учебный материал?</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Thu, 03 May 2012 11:40:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59949#p59949</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Закодировать двоичные данные]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59948#p59948</link>
			<description><![CDATA[<p><strong>Rumata</strong></p><p>Спасибо. <br />Я не очень увлекаюсь скриптописанием. Редко что-то нужно. Поэтому и обращаюсь за помощью на форум к профи. </p><p>Насколько я понимаю вставить нужно в конец функции.</p><div class="codebox"><pre><code>Function Dec2Bin(n)
Do Until n = 0
    If (n Mod 2) Then Dec2Bin = &quot;1&quot; &amp; Dec2Bin Else Dec2Bin = &quot;0&quot; &amp; Dec2Bin
    n = n \ 2
    Loop
    Dec2Bin = Right(&quot;00000000&quot; &amp; Dec2Bin, 8)
End Function</code></pre></div><p>Буду собирать конечный вариант. Проблема будет в том как писать последовательность байт в файл...</p>]]></description>
			<author><![CDATA[null@example.com (2vv)]]></author>
			<pubDate>Thu, 03 May 2012 11:25:56 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59948#p59948</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Закодировать двоичные данные]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59947#p59947</link>
			<description><![CDATA[<div class="quotebox"><cite>2vv пишет:</cite><blockquote><p>это как ?</p></blockquote></div><p>все-то вам разжевывать надо</p><div class="codebox"><pre><code>Dec2Bin = Right(&quot;00000000&quot; &amp; Dec2Bin, 8)</code></pre></div><p>Догадаетесь куда вставить?</p>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Thu, 03 May 2012 10:32:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59947#p59947</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Закодировать двоичные данные]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59946#p59946</link>
			<description><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p><strong>2vv</strong>, добавьте к строке 8 нулей слева, затем отрежьте справа те же восемь символов.</p></blockquote></div><p>Сорри, это как ?</p>]]></description>
			<author><![CDATA[null@example.com (2vv)]]></author>
			<pubDate>Thu, 03 May 2012 08:51:18 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59946#p59946</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Закодировать двоичные данные]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59934#p59934</link>
			<description><![CDATA[<p><strong>2vv</strong>, добавьте к строке 8 нулей слева, затем отрежьте справа те же восемь символов.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Wed, 02 May 2012 17:26:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59934#p59934</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Закодировать двоичные данные]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59932#p59932</link>
			<description><![CDATA[<p>На форуме нашел такую замечательную функцию <br /></p><div class="codebox"><pre><code>Function Dec2Bin(n)
Do Until n = 0
    If (n Mod 2) Then Dec2Bin = &quot;1&quot; &amp; Dec2Bin Else Dec2Bin = &quot;0&quot; &amp; Dec2Bin
    n = n \ 2
Loop
End Function</code></pre></div><p>Но есть одна проблема. Нас интересует все 8 бит. А эта функция не выводит старшие биты если в них 0. Например по числу 15 выход будет - 10101 , а нам нужен весь байт - 00010101.</p>]]></description>
			<author><![CDATA[null@example.com (2vv)]]></author>
			<pubDate>Wed, 02 May 2012 17:16:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59932#p59932</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Закодировать двоичные данные]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59930#p59930</link>
			<description><![CDATA[<div class="quotebox"><cite>2vv пишет:</cite><blockquote><p>Кодируемая последовательность - 153D89. Ваш скрит переводит эту последовательность как &quot;000101010011110111111111&quot; и это неверно.</p></blockquote></div><p>Скрипт переводит в ту последовательность, которая указана в сообщении #3, откуда эта строка я не знаю.<br /></p><div class="quotebox"><cite>2vv пишет:</cite><blockquote><p>Проверил вручную, на калькуляторе выходит -&nbsp; &quot;101010011110110001001&quot;.</p></blockquote></div><p>Если добавить ведущие нули, то получится та строка, которую выдаёт скрипт.<br /></p><div class="quotebox"><cite>2vv пишет:</cite><blockquote><p>Я не совсем понимаю что делает эта часть кода?</p><div class="codebox"><pre><code> for j=1 to 8
      if num2 and 1 then
         str = &quot;3700&quot; &amp; str
      else
         str = &quot;1400&quot; &amp; str
      end if
      num2 = num2 \ 2
   next</code></pre></div></blockquote></div><p>8 итераций(по числу бит в байте), <strong>num2 and 1</strong> возвращает значение младшего бита(он же правый бит, эквивалентно <strong>num2 mod 2</strong>) и <strong>num2 = num2 \ 2</strong> &quot;отрезает&quot; младший бит(младшим становится тот, который был вторым справа).</p>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Wed, 02 May 2012 16:56:30 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59930#p59930</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Закодировать двоичные данные]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59929#p59929</link>
			<description><![CDATA[<p><strong>Александр_</strong><br />Протестил ваш скрипт. Что-то не то выходит.<br />Кодируемая последовательность - 153D89. Ваш скрит переводит эту последовательность как &quot;000101010011110111111111&quot; и это неверно. Проверил вручную, на калькуляторе выходит -&nbsp; &quot;101010011110110001001&quot;.<br />Я не совсем понимаю что делает эта часть кода?</p><div class="codebox"><pre><code> for j=1 to 8
      if num2 and 1 then
         str = &quot;3700&quot; &amp; str
      else
         str = &quot;1400&quot; &amp; str
      end if
      num2 = num2 \ 2
   next</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (2vv)]]></author>
			<pubDate>Wed, 02 May 2012 16:39:55 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59929#p59929</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Закодировать двоичные данные]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59928#p59928</link>
			<description><![CDATA[<div class="quotebox"><cite>2vv пишет:</cite><blockquote><p>На выходе должен получиться файл содержимое которого - последовательности типа &quot;....37001400....&quot; . Конечно в идеале было бы прогнать в цикле от A10000 до A1FFFF . И после кадого значение зяписывать его код. Просто дописывая файл.</p></blockquote></div><p>Ну файл и цикл вы уж как-нибудь сами организуйте. Вариант функции, не использующий дополнительную строку:<br /></p><div class="codebox"><pre><code>MsgBox f(&quot;A1153D&quot;)

Function f(x)
   num = array(cInt(&quot;&amp;H&quot; &amp; Mid(x, 3, 2)), cInt(&quot;&amp;H&quot; &amp; Mid(x, 5, 2)), cInt(&quot;&amp;H&quot; &amp; Mid(x, 1, 2)))
   num(2) = num(0) xor num(1) xor num(2)
   str = &quot;&quot;
   for i=0 to 2
      num(i) = ((num(i) and 85)*2) or ((num(i)\2) and 85)
      num(i) = ((num(i) and 51)*4) or ((num(i)\4) and 51)
      num(i) = ((num(i) and 15)*16) or ((num(i)\16) and 15)
      for j=1 to 8
	     if num(i) and 1 then
            str = str &amp; &quot;3700&quot;
         else
            str = str &amp; &quot;1400&quot;
         end if
	     num(i) = num(i) \ 2
	  next
   next
   f = str
End Function</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Александр_)]]></author>
			<pubDate>Wed, 02 May 2012 16:33:53 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59928#p59928</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBScript: Закодировать двоичные данные]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=59922#p59922</link>
			<description><![CDATA[<div class="quotebox"><cite>Александр_ пишет:</cite><blockquote><p>Должна получиться строка из нулей и единиц?</p></blockquote></div><p>На выходе должен получиться файл содержимое которого - последовательности типа &quot;....37001400....&quot; . Конечно в идеале было бы прогнать в цикле от A10000 до A1FFFF . И после кадого значение зяписывать его код. Просто дописывая файл.</p><p>Спасибо за ваш варинт, буду пробовать</p><br /><br /><div class="quotebox"><cite>Rumata пишет:</cite><blockquote><p>Теоретически - можно. Но в VBS есть трудность в трансформации числа в битовое представление - по крайней мере нет такой же нативной функции, как Hex или Oct.</p></blockquote></div><p>Да, интересовался, в чистом видe функции нет. Но изловчиться можно.</p>]]></description>
			<author><![CDATA[null@example.com (2vv)]]></author>
			<pubDate>Wed, 02 May 2012 14:59:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=59922#p59922</guid>
		</item>
	</channel>
</rss>
