Преобразование кода
От: wilibear  
Дата: 25.05.18 12:44
Оценка:
Привет всем.

Есть код переписанный с ассемблера и преобразованный в С.

  unsigned char C = 0;
  unsigned char A=0;
  unsigned char b_B4=0;

  unsigned int wBA = 0;

  int i=0;

  for( i=3; i>=0;i--)
  {
     b_B4 = b_BE[i] & b_B6[i];
     A = b_BE[i];
     if (C)
    A = 0xFF - A;
     else
     {
    A = 0xFF - A;
    C = 0;
     }

     wBA= ((A & b_BA[i]) | b_B4) + b_A8[i] + C;
     b_A8[i] = (char) wBA;
     C = (wBA & 0x0100) ? 1: 0;
  }



Я не являюсь гуру С.

Но вопрос такого плана, (как этот кусок) преобразовать массивы к 32 битным данным.
Отредактировано 25.05.2018 13:53 Кодт . Предыдущая версия .
Re: Преобразование кода
От: Mihas  
Дата: 25.05.18 13:58
Оценка:
Здравствуйте, wilibear, Вы писали:

W>Но вопрос такого плана, (как этот кусок) преобразовать массивы к 32 битным данным.

Моя твоя не понимай.
Перефразируй вопрос. А то не понятно, что нужно?
Re[2]: Преобразование кода
От: wilibear  
Дата: 25.05.18 14:22
Оценка:
Здравствуйте, Mihas, Вы писали:

M>Здравствуйте, wilibear, Вы писали:


W>>Но вопрос такого плана, (как этот кусок) преобразовать массивы к 32 битным данным.

M>Моя твоя не понимай.
M>Перефразируй вопрос. А то не понятно, что нужно?

Переменные b_BE[4], b_B6[4] и b_A8[4] представлены в виде unsigned char.
Вся арифметика оперирует с отдельными элементами массивов b_BE, b_B6 и b_A8

Хочется чтобы вместо массивов, были просто переменные b_BE, b_B6 и b_A8

Было

for(i=3; i>=0; i++)
{
  b_A8[i] = b_A8[i]-b_BE[i] + b_B6[i];
}


Стало
  A8 = A8 -BE + B6;
Отредактировано 25.05.2018 14:24 wilibear . Предыдущая версия .
Re[3]: Преобразование кода
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 25.05.18 14:46
Оценка:
Здравствуйте, wilibear, Вы писали:

W>Переменные b_BE[4], b_B6[4] и b_A8[4] представлены в виде unsigned char.

W>Вся арифметика оперирует с отдельными элементами массивов b_BE, b_B6 и b_A8

Почему вы сразу не описали логику верхнего уровня?
Это всё очень похоже на арифметику с числами, но при этом для какого-то странного железа и неоптимальным преобразованием.

W>Хочется чтобы вместо массивов, были просто переменные b_BE, b_B6 и b_A8


Ну так сделайте, раз хочется.

Достаточно написать

uint32_t A8, B6, BE;

или как-то похоже, чтобы их можно было использовать.

W> A8 = A8 -BE + B6;
The God is real, unless declared integer.
Re: Преобразование кода
От: kov_serg Россия  
Дата: 25.05.18 15:45
Оценка:
Здравствуйте, wilibear, Вы писали:

W>(как этот кусок) преобразовать массивы к 32 битным данным.


Как-то так:
void foo(int *R,int A,int B,int M) { *R+=((A&M)|(B&~M)); }

foo( (int*)b_A8, *(int*)b_BA, *(int*)b_B6, *(int*)b_BE );

ps: только порядок байт не как у intel а в другую сторону.
A=((a[0]*256+a[1])*256+a[2])*256+a[3]
Отредактировано 25.05.2018 15:48 kov_serg . Предыдущая версия .
Re[3]: union
От: Mihas  
Дата: 27.05.18 09:09
Оценка:
Здравствуйте, wilibear, Вы писали:

W>Хочется чтобы вместо массивов, были просто переменные b_BE, b_B6 и b_A8

Попробуй применить объединение (union).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.