<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: чтение и запись бинарных данных]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=3829</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=3829&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: чтение и запись бинарных данных».]]></description>
		<lastBuildDate>Tue, 03 Nov 2009 18:28:04 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: чтение и запись бинарных данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=30078#p30078</link>
			<description><![CDATA[<p>Спасибо, ясно.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Tue, 03 Nov 2009 18:28:04 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=30078#p30078</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: чтение и запись бинарных данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=30077#p30077</link>
			<description><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>OFF: <strong>The gray Cardinal</strong>, а какой антивирус?</p></blockquote></div><p><a href="http://www.free-av.com/">Avira</a>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Tue, 03 Nov 2009 18:27:26 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=30077#p30077</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: чтение и запись бинарных данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=30070#p30070</link>
			<description><![CDATA[<p>OFF: <strong>The gray Cardinal</strong>, а какой антивирус?</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Tue, 03 Nov 2009 17:26:44 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=30070#p30070</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: чтение и запись бинарных данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=30068#p30068</link>
			<description><![CDATA[<p>При указании &quot;windows-1251&quot; действительно работает, поэтому пусть будет <a href="http://forum.script-coding.com/viewtopic.php?pid=30067#p30067">в Коллекции</a>. Если придут ещё какие мысли или усовершенствования, дополнить тему в Коллекции всегда можно.</p><p>У меня срабатывает независимо от расширения преобразуемых файлов (bin, jpg, dll). Однако файл скрипта пришлось поставить в исключения антивируснику, иначе код запустить невозможно.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Tue, 03 Nov 2009 16:40:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=30068#p30068</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: чтение и запись бинарных данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=30064#p30064</link>
			<description><![CDATA[<p>Патч на подмену кодовых таблиц 125x--&gt;1251 я завсегда ставлю.<br />У меня срабатывает и на .Charset = &quot;windows-1251&quot; и на .Charset = &quot;x-ansi&quot;. Написал последнее, т.к. сам до конца в эти манипуляции с с кхарсетами не въехал, поэтому посчитал что автор - умнее.<br />Вообще пока мы все вместе не расставим все точки над i с этими преобразованиями с помощью ADODB.Stream я бы не советовал никому их использовать. Слишком уж от многих факторов зависит результат.<br />Что же касается расширения преобразуемых файлов, то от него ничего <span class="bbu">не должно</span> менятся. Однако - меняется! Я думаю что тут виноваты или антивирус или какие то патчи Мелкософта (ну очень они боятся этого объекта, поскольку большинство скриптовых вирусов его активно используют).<br />Так что <a href="http://www.motobit.com/tips/detpg_binarytostring/">вариант</a>, найденный <strong>alexii</strong> мне очень понравился. И как я, дурак, забыл про существование этой расчудесной функции <strong>MidB</strong> ?<br />Ща мы его только подрехтуем маленько...</p>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Tue, 03 Nov 2009 14:28:11 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=30064#p30064</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: чтение и запись бинарных данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=30061#p30061</link>
			<description><![CDATA[<div class="quotebox"><cite>alexii пишет:</cite><blockquote><p>что сработало?!</p></blockquote></div><p>Файлы совпали. При x-ansi копия коверкалась, это можно хорошо отследить, если дать на вход текстовый файл в ANSI с русскими буквами, проблема появляется на этапе ByteArray2String(bArr). Символы русского алфавита преобразовывались в латиницу и спец знаки, соответственно Asc() уже возвращало не правильные коды и файл на выходе был другой. Попробуйте изменить в скрипте <br /></p><div class="codebox"><pre><code>.Charset = &quot;x-ansi&quot;</code></pre></div><p>на <br /></p><div class="codebox"><pre><code>.Charset = &quot;windows-1251&quot;</code></pre></div><p>в обоих местах, где это встречается.</p>]]></description>
			<author><![CDATA[null@example.com (clotd)]]></author>
			<pubDate>Tue, 03 Nov 2009 11:34:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=30061#p30061</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: чтение и запись бинарных данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=30060#p30060</link>
			<description><![CDATA[<p>У меня стоит патч реестра на подмену кодовых таблиц 125x--&gt;1251, может быть с этим что-то связано, что сработало?!</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Tue, 03 Nov 2009 11:25:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=30060#p30060</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: чтение и запись бинарных данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=30058#p30058</link>
			<description><![CDATA[<p>Поменял x-ansi на windows-1251 и все заработало <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></description>
			<author><![CDATA[null@example.com (clotd)]]></author>
			<pubDate>Tue, 03 Nov 2009 10:26:28 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=30058#p30058</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: чтение и запись бинарных данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=30057#p30057</link>
			<description><![CDATA[<div class="quotebox"><cite>The gray Cardinal пишет:</cite><blockquote><p>Прошу проверить скрипт ещё кого-нибудь, кому не лень.</p></blockquote></div><p>Проверил для файлов *.exe, *.dll, *.jpg. Не работает.</p>]]></description>
			<author><![CDATA[null@example.com (Dmitrii)]]></author>
			<pubDate>Tue, 03 Nov 2009 09:43:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=30057#p30057</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: чтение и запись бинарных данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=30056#p30056</link>
			<description><![CDATA[<p>Попробовал приведенный здесь код, файлы не совпадают, также копировал jpeg. Подозреваю проблема связана с локалью и кодировкой. Если убрать циклы с преобразованием в строку, то все работает.</p>]]></description>
			<author><![CDATA[null@example.com (clotd)]]></author>
			<pubDate>Tue, 03 Nov 2009 09:22:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=30056#p30056</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: чтение и запись бинарных данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=30055#p30055</link>
			<description><![CDATA[<p><strong>2mozers</strong>: я тут <a href="http://forum.script-coding.com/viewtopic.php?pid=30027#p30027">параллельно</a> решаю ту же проблему с чтением бинарных файлов. Основным источником взял это: <a href="http://www.motobit.com/tips/detpg_binarytostring/">Convert a binary data (BinaryRead) to a string by VBS</a> (пробовал оттуда пока только улучшенный первый вариант). Я так понимаю, что это, если не то же самое, то очень близко?!</p><p><strong>2The gray Cardinal</strong>: я пробовал вчера код коллеги <strong>mozers</strong>&#039;а, тоже на jpeg&#039;е. На одном. У меня отработало нормально, т.е. получившийся итоговый файл совпал с исходным по содержимому.</p><p>P.S. У меня <em>глаза на лоб полезли</em>, когда я, пытаясь читать бинарные файлы как текстовые (посредством FSO, «objFile.OpenAsTextStream()»), получил на копиях одного и того же файла (в разных каталогах) разное содержание. Причём, некоторые копии давали одинаковое содержимое, некоторые другие — разное <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" />.</p>]]></description>
			<author><![CDATA[null@example.com (alexii)]]></author>
			<pubDate>Tue, 03 Nov 2009 09:11:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=30055#p30055</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: чтение и запись бинарных данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=30054#p30054</link>
			<description><![CDATA[<p>Прошу проверить скрипт ещё кого-нибудь, кому не лень.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Tue, 03 Nov 2009 08:37:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=30054#p30054</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: чтение и запись бинарных данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=30043#p30043</link>
			<description><![CDATA[<p>2<strong>The gray Cardinal</strong><br />Думаю что тут все дело в том, что промежуточный результат (<em>только для наглядности</em>) переводится в обычный стринг.<br />Т.е. если картинка - 67кб, то стринг получится длиной в 137216 байт. А у нас какое ограничение на длину стринга в VBS?</p><p><span class="bbu">Добавлено:</span><br />Нет. Мое предположение - неверно. В непонятках что на твоей машине происходит. Ща эксперементировал, постепенно увеличивая размер. Дошел до 200КБ (скрипт работал почти 200 сек) но результат выдал 1:1.<br />Если выкинуть циклы с преобразованием в длиннющую строку и обратно, то на преобразование 8МБ файла уходит минута.<br />Сравниваю исходник и результат, естественно, не визуально (в Total Commander есть инструмент сравнения).</p>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Mon, 02 Nov 2009 21:54:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=30043#p30043</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: чтение и запись бинарных данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=30035#p30035</link>
			<description><![CDATA[<p>У меня не сработало. У меня входной и результирующий файлы отличаются, прямо с самого начала (в SciTE это невооружённым глазом видно). Пробовал на картинке JPG (67 Кб), результирующая картинка получается испорченной, уже не открывается.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Mon, 02 Nov 2009 20:51:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=30035#p30035</guid>
		</item>
		<item>
			<title><![CDATA[VBS: чтение и запись бинарных данных]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=29996#p29996</link>
			<description><![CDATA[<p>Аналогичная <a href="http://forum.script-coding.com/viewtopic.php?pid=9552#p9552">темка</a> уже имеется в Коллекции. Но там - пример на JS и, на мой взгляд, решение, которое я предлагаю вашему вниманию - интереснее. Интереснее, за счет вполне самостоятельных процедур <em>конвертации битового массива в стринг и наоборот</em> (раскопал <a href="http://www.eggheadcafe.com/software/aspnet/29795742/cant-read-array-values.aspx">тут</a>)<br />В общем - смотрите сами:</p><div class="codebox"><pre><code>&#039; Convert Byte-Array to VBScript ANSI string (c)Paul Randall
Function ByteArray2String(bArr)
    Dim OriginalLocale
    OriginalLocale = SetLocale(&quot;en-us&quot;)
    With CreateObject(&quot;ADODB.Stream&quot;)
        .Type = 1 &#039;adTypeBinary
        .Open
        .Write bArr
        .Position = 0
        .Type = 2 &#039;adTypeText
        .Charset = &quot;x-ansi&quot;
        ByteArray2String = .Readtext
    End With
    SetLocale OriginalLocale
End Function

&#039;Convert VBScript ANSI string to Byte-Array (c)Paul Randall
Function String2ByteArray(str)
    Dim OriginalLocale
    OriginalLocale = SetLocale(&quot;en-us&quot;)
    With CreateObject(&quot;ADODB.Stream&quot;)
        .Type = 2 &#039;adTypeText
        .Charset = &quot;x-ansi&quot;
        .Open
        .WriteText str, 0
        .Position = 0
        .Type = 1 &#039;adTypeBinary
        String2ByteArray = .Read
    End With
    SetLocale OriginalLocale
End Function

Function ReadBinaryFile(filename)
    Dim bArr
    With CreateObject(&quot;ADODB.Stream&quot;)
        .Type = 1 &#039;adTypeBinary
        .Open
        .LoadFromFile filename
        bArr = .Read
        .Close
        ReadBinaryFile = bArr
    End With
End Function

Function SaveBinaryData(filename, byteArray)
    Const adSaveCreateOverWrite = 2
    With CreateObject(&quot;ADODB.Stream&quot;)
        .Type = 1 &#039;adTypeBinary
        .Open
        .Write byteArray
        .SaveToFile filename, adSaveCreateOverWrite
        .Close
    End With
End Function

&#039;============================================================
&#039; Проверка
file = &quot;input.bin&quot;
file_out = &quot;output.bin&quot;

Dim file, file_out, Arr, strArr, strHex, x, i
&#039; Читаем бинарный файл и преобразуем его в строку из hex значений
Arr = ReadBinaryFile(file)
strArr = ByteArray2String(Arr)
strHex = &quot;&quot;
For i = 1 To Len(strArr)
    x = Hex(Asc(Mid(strArr, i, 1)))
    If Len(x) &lt; 2 Then x = &quot;0&quot; &amp; x
    strHex = strHex + x
Next
WScript.Echo strHex

&#039; Читаем строку из hex значений и записываем её в бинарный файл
strArr = &quot;&quot;
For i = 1 To Len(strHex) Step 2
    strArr = strArr &amp; Chr(&quot;&amp;H&quot; &amp; Mid(strHex, i, 2))
Next
Arr = String2ByteArray(strArr)
SaveBinaryData file_out, Arr

&#039;Можете сравнить входной и результирующий файл - они равны!</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (mozers)]]></author>
			<pubDate>Sun, 01 Nov 2009 22:31:07 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=29996#p29996</guid>
		</item>
	</channel>
</rss>
