powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перевернуть биты в байте
25 сообщений из 25, страница 1 из 1
Перевернуть биты в байте
    #39641266
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно есть какая нибудь библиотечная функция? типа ReverseBits. Все таки C# - все придуманно до нас.
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39641272
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,

амн... двоичное дополнение хотите получить?
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39641274
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39641281
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,

или Вам именно для типа Byte нужно?
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39641285
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANAjenya7,

или Вам именно для типа Byte нужно?
нет. есть бинарный файл. но биты в нем расположенны в обратном порядке. перед записью во флеш их нужно перевернуть.
то есть было 00100110 стало 01100100
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39641288
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7skyANAjenya7,

или Вам именно для типа Byte нужно?
нет. есть бинарный файл. но биты в нем расположенны в обратном порядке. перед записью во флеш их нужно перевернуть.
то есть было 00100110 стало 01100100
Так Вам надо биты инвертировать, или файл в обратном порядке прочитать?
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39641290
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7, так вроде вам уже приводили... то-ли код то-ли ссыль на код...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
static byte ReverseBits(byte value) 
        { 
            byte reversed = 0x00; 
 
            int i = 7, j = 0; 
 
            while (i >= 0) 
            { 
                reversed |= (byte)(((value >> i) & 0x01) << j); 
                i--; 
                j++; 
            } 
            return reversed; 
        }
static byte[] ReverseBytes(byte[] data) 
   { 
       byte[] reversed = new byte[data.Length]; 

       for (int i = 0; i < data.Length; i++) 
           reversed[i] = ReverseBits(data[i]); 

       return reversed; 
   } 

...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39641311
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buserjenya7, так вроде вам уже приводили... то-ли код то-ли ссыль на код...
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
static byte ReverseBits(byte value) 
        { 
            byte reversed = 0x00; 
 
            int i = 7, j = 0; 
 
            while (i >= 0) 
            { 
                reversed |= (byte)(((value >> i) & 0x01) << j); 
                i--; 
                j++; 
            } 
            return reversed; 
        }
static byte[] ReverseBytes(byte[] data) 
   { 
       byte[] reversed = new byte[data.Length]; 

       for (int i = 0; i < data.Length; i++) 
           reversed[i] = ReverseBits(data[i]); 

       return reversed; 
   } 



спасибо попробую. я думал в .NET уже есть методы для этого. а мы тут прям в каменный век в битвайз операции уходим :)
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39641313
L1G
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
static byte ReverseBits(byte b) { return reversedByte[b]; }

// как автоматизировать заполнение всех 256 значений и нужно ли, или же тупо набить их вручную - подумайте сами
static byte[] reversedByte = new byte[256] {0, 0x80, 0x40, 0xc0, ......}; 
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39642365
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L1G
Код: c#
1.
2.
3.
4.
static byte ReverseBits(byte b) { return reversedByte[b]; }

// как автоматизировать заполнение всех 256 значений и нужно ли, или же тупо набить их вручную - подумайте сами
static byte[] reversedByte = new byte[256] {0, 0x80, 0x40, 0xc0, ......}; 


хэш таблица это круто, но где ж взять силы ее всю заполнить :)
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39642414
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7хэш таблица это круто, но где ж взять силы ее всю заполнить :)
Копипастить из консоли не умеешь?

В остальном это самое идеальное решение. Не надо думать что в C# все есть. Там есть все нужное, а экзотики там нет, т.к. она никому не нужна.
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39642466
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima Tjenya7хэш таблица это круто, но где ж взять силы ее всю заполнить :)
Копипастить из консоли не умеешь?

В остальном это самое идеальное решение. Не надо думать что в C# все есть. Там есть все нужное, а экзотики там нет, т.к. она никому не нужна.
сделал так
Код: c#
1.
2.
3.
4.
5.
6.
for (byte i = 0; i < 255; i++)
{
    byte b = ReverseBits(i);
    richTextBoxLogger.AppendText("0x" + b.ToString("X2") + ",");

}


результат
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0,0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,
0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8,0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4,
0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC,0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2,0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA,0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6,0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,
0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE,0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1,
0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9,0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,
0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5,0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,
0xFD,0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3,0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,
0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB,0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,
0xF7,0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39642574
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,

в результате отсутствует 0xFF, садись 2а
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39642653
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesв результате отсутствует 0xFF, садись 2аjenya7
Код: c#
1.
i < 255
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39642801
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
0xFF можно и ручками добавить
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39642823
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya70xFF можно и ручками добавитьВместо того, чтобы исправить условие в цикле? )
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39642860
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Projenya70xFF можно и ручками добавитьВместо того, чтобы исправить условие в цикле? )
тогда byte превращается... превращается... в int.
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39642867
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это как это? FF еще не int
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39642870
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProЭто как это? FF еще не int
при условии i<256 или i<=255 я остаюсь в бесконечном цикле. так работает
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
private void PrintReversedBytes()
        {
            byte b = 0;
            for (int i = 0; i <256; i++)
            {
                b = ReverseBits((byte)i);
                richTextBoxLogger.AppendText("0x" + b.ToString("X2") + ",");

            }
        }
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39642938
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на уровне ассемблера\процессора вроде пофигу, что int, что byte, регистры всего равно "int'овые" , работать будет одинаково, не имеет смысла сильно заморачиваться, не стоит и там где можно использовать int, особенно где размер значения не имеет.
Код: c#
1.
2.
3.
4.
foreach(byte b in Enumerable.Range(0, 256))
{

}
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39642940
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public PrintReversedBytes()
{
    var values = Enumerable.Range(0, 256);
    var result = string.Join(",", values.Select(ReverseBits).Select(p=>p.ToString("X2")));
    Console.WriteLine(result);
}

public byte ReverseBits(int value)
{
    return (byte)value;
}
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39643041
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Shocker.Proпропущено...
Вместо того, чтобы исправить условие в цикле? )
тогда byte превращается... превращается... в int.
Можно цикл поправить
Код: c#
1.
2.
3.
4.
Byte i = 0;
do {
	...
} while(++i != 0);
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39643048
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7Shocker.Proпропущено...
Вместо того, чтобы исправить условие в цикле? )
тогда byte превращается... превращается... в int.
Ничего он не превращается. Там цикл по умолчанию unchecked - не проверяет границы типа, поэтому при переполнении диапазона возможных значений значения типа начинают отсчитываться от ближайшей максимальной границы (256=0, 257=1, ... 511 = 255), и поэтому возникает бесконечный цикл. Если такой цикл завернуть в checked (ну, или в свойствах проекта поставить галку Check for arithmetic overflow/underflow - по умолчанию она снята):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
class Program
{
  public static void Main()
  {
    try
    {
      checked
      {
        for (byte b = 0; b < 256; b++)
          Console.WriteLine(b);
      }
    }
    catch(Exception e)
    {
      Console.WriteLine("{0}: {1}", e.GetType(), e.Message);
    }
  }
}


то будет вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
251
252
253
254
255
System.OverflowException: Переполнение в результате выполнения арифметической операции.

Как это обойти, выше уже написали.
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39643050
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сон Веры Павловныпри переполнении диапазона возможных значений значения типа начинают отсчитываться от ближайшей максимальной границы
* при переполнении диапазона возможных значений значение сбрасывается.
...
Рейтинг: 0 / 0
Перевернуть биты в байте
    #39643137
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
jenya7нет. есть бинарный файл. но биты в нем расположенны в обратном порядке. перед записью во флеш их нужно перевернуть.
то есть было 00100110 стало 01100100
Вроде бы IPAddress.HostToNetworkOrder так делает, но только для целых чисел
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перевернуть биты в байте
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]