<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Копирование подмассива побитно.</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7623.html</link>
    <description>Здравствуйте! Подскажите пожалуйста каким образом можно выполнить побитное копирование части содержимого одного массива в другой (C/C++).&lt;br&gt;Например имеем:&lt;br&gt;char * sourceArray;&lt;br&gt;char * targetArray;&lt;br&gt;&lt;br&gt;Нужно скопировать из sourceArray содержимое по смещению n бит, размером k бит в targetArray.&lt;br&gt;memcpy() я так понимаю не подходит для этого дела, поскольку копирует побайтно.&lt;br&gt;И как можно смещать указатель на n бит?&lt;br&gt;Спасибо. &lt;br&gt;</description>

<item>
    <title>Копирование подмассива побитно. (alexB)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7623.html#8</link>
    <pubDate>Mon, 06 Oct 2008 17:54:57 GMT</pubDate>
    <description>Всем спасибо! &lt;br&gt;Вариант&lt;br&gt;for (i=0; i&amp;lt;n; i++) &#123;&lt;br&gt;    dest&#091;i&#093; = (source&#091;i&#093; &amp;lt;&amp;lt; bit) &amp;#124; (source&#091;i+1&#093; &amp;gt;&amp;gt; (8-bit));&lt;br&gt;&#125;&lt;br&gt;меня в принципе устраивает.&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Копирование подмассива побитно. (f00l)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7623.html#7</link>
    <pubDate>Mon, 06 Oct 2008 03:27:21 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;Например имеем: &lt;br&gt;&amp;gt;char * sourceArray; &lt;br&gt;&amp;gt;char * targetArray; &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Нужно скопировать из sourceArray содержимое по смещению n бит, размером k бит &lt;br&gt;&amp;gt;в targetArray. &lt;br&gt;&amp;gt;memcpy() я так понимаю не подходит для этого дела, поскольку копирует побайтно. &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;И как можно смещать указатель на n бит? &lt;br&gt;&amp;gt;Спасибо. &lt;br&gt;&lt;br&gt;Если n и k известны можно используй битовые поля примерно так &lt;br&gt;struct uc&lt;br&gt;&#123;&lt;br&gt; unsigned char bit_0 : 1;&lt;br&gt; unsigned char bit_1 : 1;&lt;br&gt; unsigned char bit_2 : 1;&lt;br&gt; unsigned char bit_3 : 1;&lt;br&gt; unsigned char bit_4 : 1;&lt;br&gt; unsigned char bit_5 : 1;&lt;br&gt; unsigned char bit_6 : 1;&lt;br&gt; unsigned char bit_7 : 1;&lt;br&gt;&#125;;&lt;br&gt;&lt;br&gt;struct uc sourceArray;&lt;br&gt;struct uc targetArray;&lt;br&gt;&lt;br&gt;targetArray.bit_0 = sourceArray.bit_0;&lt;br&gt;</description>
</item>

<item>
    <title>Копирование подмассива побитно. (Fuzzy)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7623.html#6</link>
    <pubDate>Sun, 05 Oct 2008 17:15:46 GMT</pubDate>
    <description>&amp;gt;Вроде работает. Только по-моему надо маскировать сдвиг старшего байта: &lt;br&gt;&amp;gt;for (i=0; i&amp;lt;n; i++) &#123; &lt;br&gt;&amp;gt;    dest&#091;i&#093; = (source&#091;i&#093; &amp;lt;&amp;lt; bit) &amp;#124; ((source&#091;i+1&#093; &amp;gt;&amp;gt; (8-bit)) &amp; 0xF);&lt;br&gt;&amp;gt;&#125; &lt;br&gt;&lt;br&gt;Если тип unsigned, (unsigned char) то после сдига та часть откуда сдвинули заполняется нулями, а так неопроеделено.&lt;br&gt;http://www.opennet.ru/docs/RUS/ansi-c/ansi-c-5.html#ss5.3&lt;br&gt;&lt;br&gt;И я не думаю что надо маскировать, &lt;br&gt;в примере тип должен быть unsigned char, так должно работать, &lt;br&gt;только надо коректировать последний байт.&lt;br&gt;</description>
</item>

<item>
    <title>Копирование подмассива побитно. (alexB)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7623.html#5</link>
    <pubDate>Sun, 05 Oct 2008 17:00:34 GMT</pubDate>
    <description>&amp;gt;&amp;gt;Вот вариант, копирование с битовым сдвигом, &lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt;for (i=0; i&amp;lt;n; i++) &#123; &lt;br&gt;&amp;gt;&amp;gt;    dest&#091;i&#093; = (source&#091;i&#093; &amp;lt;&amp;lt; bit) &amp;#124; (source&#091;i+1&#093; &amp;gt;&amp;gt; (8-bit));&lt;br&gt;&amp;gt;&amp;gt;&#125; &lt;br&gt;&amp;gt;&lt;br&gt;&lt;br&gt;Вроде работает. Только по-моему надо маскировать сдвиг старшего байта:&lt;br&gt;for (i=0; i&amp;lt;n; i++) &#123; &lt;br&gt;    dest&#091;i&#093; = (source&#091;i&#093; &amp;lt;&amp;lt; bit) &amp;#124; ((source&#091;i+1&#093; &amp;gt;&amp;gt; (8-bit)) &amp; 0xF);&lt;br&gt;&#125; &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Копирование подмассива побитно. (alexB)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7623.html#4</link>
    <pubDate>Sun, 05 Oct 2008 16:24:04 GMT</pubDate>
    <description>&amp;gt;Вот вариант, копирование с битовым сдвигом, &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;for (i=0; i&amp;lt;n; i++) &#123; &lt;br&gt;&amp;gt;    dest&#091;i&#093; = (source&#091;i&#093; &amp;lt;&amp;lt; bit) &amp;#124; (source&#091;i+1&#093; &amp;gt;&amp;gt; (8-bit));&lt;br&gt;&amp;gt;&#125; &lt;br&gt;&lt;br&gt;Интересно. Сейчас попробую. Спасибо.&lt;br&gt;</description>
</item>

<item>
    <title>Копирование подмассива побитно. (Fuzzy)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7623.html#3</link>
    <pubDate>Sun, 05 Oct 2008 15:56:29 GMT</pubDate>
    <description>&amp;gt;Тем не менее вопрос остается открытым. &lt;br&gt;&lt;br&gt;Вот вариант, копирование с битовым сдвигом, &lt;br&gt;&lt;br&gt;for (i=0; i&amp;lt;n; i++) &#123;&lt;br&gt;    dest&#091;i&#093; = (source&#091;i&#093; &amp;lt;&amp;lt; bit) &amp;#124; (source&#091;i+1&#093; &amp;gt;&amp;gt; (8-bit));&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Копирование подмассива побитно. (alexB)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7623.html#2</link>
    <pubDate>Sun, 05 Oct 2008 15:21:20 GMT</pubDate>
    <description>&amp;gt;Никак. Потому что адресуются байты. &lt;br&gt;&amp;gt;Если тебе надо копировать байт частичо, используй логические операции (маски). &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;А ещё в c++ STL есть готовый массив битов )) &lt;br&gt;&lt;br&gt;Я бы не стал говорить так категорично. Есть вариант копирования через какой-нибудь 32-х разрядный контейнер со сдвигом на необходимое смещение. Но мне что-то не нравится этот алгоритм. А вот за за подсказку про STL спасибо, посмотрю.&lt;br&gt;Тем не менее вопрос остается открытым.&lt;br&gt;</description>
</item>

<item>
    <title>Копирование подмассива побитно. (Аноним)</title>
    <link>https://www.opennet.ru/openforum/vsluhforumID9/7623.html#1</link>
    <pubDate>Sun, 05 Oct 2008 14:50:42 GMT</pubDate>
    <description>&amp;gt;Здравствуйте! Подскажите пожалуйста каким образом можно выполнить побитное копирование части содержимого одного &lt;br&gt;&amp;gt;массива в другой (C/C++). &lt;br&gt;&amp;gt;Например имеем: &lt;br&gt;&amp;gt;char * sourceArray; &lt;br&gt;&amp;gt;char * targetArray; &lt;br&gt;&lt;br&gt;Никак. Потому что адресуются байты.&lt;br&gt;Если тебе надо копировать байт частичо, используй логические операции (маски).&lt;br&gt;&lt;br&gt;А ещё в c++ STL есть готовый массив битов ))&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

</channel>
</rss>
