Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Запись-чтение 10-ти битовых целых чисел Добавлено: 28.08.12 02:28  

Автор вопроса:  ragulius
Как єтоє возможно быть. Подскажите пожалста.

Ответить

  Ответы Всего ответов: 8  

Номер ответа: 1
Автор ответа:
 ragulius



Вопросов: 1
Ответов: 6
 Профиль | | #1 Добавлено: 28.08.12 02:33
Формат LittleEndian; целые без знака; 10-битные; запись-чтение в\из Stream; подскажыте плз

Ответить

Номер ответа: 2
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #2 Добавлено: 28.08.12 09:23
http://www.csharp-examples.net/reverse-bytes/

Ответить

Номер ответа: 3
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #3 Добавлено: 28.08.12 15:57
Алгоритм будет похож на работу с Base64.

Только тут на каждые 5 байт (5*8=40 бит) будет приходиться 4 значения.
Рассчитываешь нужные маски и смещения и вперед.

Ответить

Номер ответа: 4
Автор ответа:
 hueeveert



Вопросов: 0
Ответов: 3
 Профиль | | #4 Добавлено: 28.08.12 22:26
that answer is not wrong

http://filedairy.com/?d=503D08C81

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Text;
  6. using System.Windows.Forms;
  7. using System.IO;
  8.  
  9. namespace num_pack_cs
  10. {
  11.  
  12.  public partial class Form1 : Form
  13.  {
  14.  
  15.   // unsigned 10-bit integer numbers in range 0 .... 1023; in Little Endian format
  16.  
  17.   private void PackNumbers(Stream stream, List<ushort> numbers)
  18.   {
  19.    byte bitbuffer, bitcount;
  20.    bitbuffer = bitcount = 0;
  21.    for (int i = 0; i < numbers.Count; i++)
  22.    {
  23.     ushort n = numbers;
  24.     for (int j = 0; j < 10; j++, n >>= 1)
  25.     {
  26.      if ((n & 1) == 1) bitbuffer |= (byte)(1 << bitcount);
  27.      bitcount++;
  28.      if (bitcount == 8)
  29.      {
  30.       stream.WriteByte(bitbuffer);
  31.       bitcount = bitbuffer = 0;
  32.      }
  33.     }
  34.    }
  35.    // flush bits
  36.    if (bitcount > 0) stream.WriteByte(bitbuffer);
  37.   }
  38.  
  39.   private List<ushort> UnpackNumbers(Stream stream)
  40.   {
  41.    List<ushort> numbers = new List<ushort>();
  42.    int i;
  43.    ushort n;
  44.    byte bitbuffer, bitcount;
  45.    i = n = bitbuffer = bitcount = 0;
  46.    while ((i = stream.ReadByte()) > -1)
  47.    {
  48.     bitbuffer = (byte)i;
  49.     for (int j = 0; j < 8; j++, bitbuffer >>= 1)
  50.     {
  51.      if ((bitbuffer & 1) == 1) n |= (ushort)(1 << bitcount);
  52.      bitcount++;
  53.      if (bitcount == 10)
  54.      {
  55.       numbers.Add(n);
  56.       n = bitcount = 0;
  57.      }
  58.     }
  59.    }
  60.    return numbers;
  61.   }
  62.  
  63.   public Form1()
  64.   {
  65.    InitializeComponent();
  66.   }
  67.  
  68.   private void button1_Click(object sender, EventArgs e)
  69.   {
  70.    listBox1.Items.Clear();
  71.    listBox2.Items.Clear();
  72.    List<ushort> numbers = GenerateRandom();
  73.    for (int i = 0; i < numbers.Count; i++)
  74.     listBox1.Items.Add(numbers);
  75.    using (MemoryStream ms = new MemoryStream())
  76.    {
  77.     PackNumbers(ms, numbers);
  78.     ms.Position = 0;
  79.     numbers = UnpackNumbers(ms);
  80.    }
  81.    for (int i = 0; i < numbers.Count; i++)
  82.     listBox2.Items.Add(numbers);
  83.   }
  84.  
  85.   private List<ushort> GenerateRandom()
  86.   {
  87.    List<ushort> random_numbers = new List<ushort>();
  88.    Random rnd = new Random(DateTime.Now.Millisecond ^ DateTime.Now.Second | DateTime.Now.Minute);
  89.    for (int i = 0; i < 25; i++) random_numbers.Add((ushort)rnd.Next(1023));
  90.    return random_numbers;
  91.   }
  92.  
  93.  }
  94.  
  95. }

Ответить

Номер ответа: 5
Автор ответа:
 петросян



Вопросов: 1
Ответов: 7
 Профиль | | #5 Добавлено: 30.08.12 14:10
исчоб со знаком целых хто нибудь подогнал код

Ответить

Номер ответа: 6
Автор ответа:
 жванецкий



Вопросов: 0
Ответов: 8
 Профиль | | #6 Добавлено: 02.09.12 11:46
БУГАГА БУГАГА БУГАГА БУГАГА

Ответить

Номер ответа: 7
Автор ответа:
 бзззззьььь



Вопросов: 0
Ответов: 6
 Профиль | | #7 Добавлено: 02.09.12 23:58
БУГАГА

Ответить

Номер ответа: 8
Автор ответа:
 пєтросян



Вопросов: 0
Ответов: 4
 Web-сайт: mmm.sayta.net
 Профиль | | #8
Добавлено: 04.09.12 18:32
http://filedairy.com/?d=503D08C81

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Text;
  6. using System.Windows.Forms;
  7. using System.IO;
  8.  
  9. namespace num_pack_cs
  10. {
  11.  
  12.  public partial class Form1 : Form
  13.  {
  14.  
  15.   // unsigned 10-bit integer numbers in range 0 .... 1023; in Little Endian format
  16.  
  17.   private void PackNumbers(Stream stream, List<ushort> numbers)
  18.   {
  19.    byte bitbuffer, bitcount;
  20.    bitbuffer = bitcount = 0;
  21.    for (int i = 0; i < numbers.Count; i++)
  22.    {
  23.     ushort n = numbers;
  24.     for (int j = 0; j < 10; j++, n >>= 1)
  25.     {
  26.      if ((n & 1) == 1) bitbuffer |= (byte)(1 << bitcount);
  27.      bitcount++;
  28.      if (bitcount == 8)
  29.      {
  30.       stream.WriteByte(bitbuffer);
  31.       bitcount = bitbuffer = 0;
  32.      }
  33.     }
  34.    }
  35.    // flush bits
  36.    if (bitcount > 0) stream.WriteByte(bitbuffer);
  37.   }
  38.  
  39.   private List<ushort> UnpackNumbers(Stream stream)
  40.   {
  41.    List<ushort> numbers = new List<ushort>();
  42.    int i;
  43.    ushort n;
  44.    byte bitbuffer, bitcount;
  45.    i = n = bitbuffer = bitcount = 0;
  46.    while ((i = stream.ReadByte()) > -1)
  47.    {
  48.     bitbuffer = (byte)i;
  49.     for (int j = 0; j < 8; j++, bitbuffer >>= 1)
  50.     {
  51.      if ((bitbuffer & 1) == 1) n |= (ushort)(1 << bitcount);
  52.      bitcount++;
  53.      if (bitcount == 10)
  54.      {
  55.       numbers.Add(n);
  56.       n = bitcount = 0;
  57.      }
  58.     }
  59.    }
  60.    return numbers;
  61.   }
  62.  
  63.   public Form1()
  64.   {
  65.    InitializeComponent();
  66.   }
  67.  
  68.   private void button1_Click(object sender, EventArgs e)
  69.   {
  70.    listBox1.Items.Clear();
  71.    listBox2.Items.Clear();
  72.    List<ushort> numbers = GenerateRandom();
  73.    for (int i = 0; i < numbers.Count; i++)
  74.     listBox1.Items.Add(numbers);
  75.    using (MemoryStream ms = new MemoryStream())
  76.    {
  77.     PackNumbers(ms, numbers);
  78.     ms.Position = 0;
  79.     numbers = UnpackNumbers(ms);
  80.    }
  81.    for (int i = 0; i < numbers.Count; i++)
  82.     listBox2.Items.Add(numbers);
  83.   }
  84.  
  85.   private List<ushort> GenerateRandom()
  86.   {
  87.    List<ushort> random_numbers = new List<ushort>();
  88.    Random rnd = new Random(DateTime.Now.Millisecond ^ DateTime.Now.Second | DateTime.Now.Minute);
  89.    for (int i = 0; i < 25; i++) random_numbers.Add((ushort)rnd.Next(1023));
  90.    return random_numbers;
  91.   }
  92.  
  93.  }
  94.  
  95. }

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам