Форум программистов CodeGuru
20 Июнь 2018, 13:23:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Не происходит объединение?  (Прочитано 1970 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ATAMAN200
Интересующийся
**
Офлайн Офлайн

Сообщений: 29


Просмотр профиля
« : 31 Октябрь 2010, 19:37:04 »

Код:
#include "stdafx.h"
#include <iostream>
#include "conio.h"
using namespace std;

#define HIBYTE(l) ((l & 0xffff) >> 8)
#define LOBYTE(l) ((int)(l) & 0xff)
//Макросы для разделения на младший бит и старший бит


unsigned char *a2 = new unsigned char[];
unsigned char *b2 = new unsigned char[];
unsigned char *c2 = new unsigned char[];

unsigned __int16 a[] = {0xFA55, 0x5699, 0xD5D8, 0xAAF6, 0x8899},
         b[] = {0x6456, 0x9986, 0x3336, 0x5776, 0xAF64, 0x6667};
unsigned __int16 *c = new unsigned __int16[];

int main()
{
for(int i=0, j=0, k=0; k < (sizeof(a)+sizeof(b))/sizeof(*c); k++)
{
c[k] = (a[i] << b[j]) ? a[i++] : b[j++];
//Объединяет массивы a[] и b[] в массив *c


*a2 = HIBYTE(c[k]);
*b2 = LOBYTE(c[k]);
//Деллит данные массива *c на старший, млыдший бит и записывает их в массивы *a2 и *b2
}


for(int i=0, j=0, k=0; k < (sizeof(a2)+sizeof(b2))/sizeof(*c2); k++)
{
c2[k] = (a2[i] << b2[j]) ? a2[i++] : b2[j++];
//Объединяет массивы a2[] и b2[] в массив *c2


printf("%x\n", c2[k]);
//Результат объединения массивов a2[] и b2[] должен выводить на экран в столбик???
}
getch();
}

на экран выводит вот такое

66
fd
fd
fd
ab
ab
ab
ab

а должен выводить

fa
55
56
99
d5
d8
aa
f6
88
99
64
56
99
86
33
36
57
76
af
64
66
67
Записан
Valery
Пользователь
***
Офлайн Офлайн

Сообщений: 83


Просмотр профиля
« Ответ #1 : 01 Ноябрь 2010, 13:39:24 »

Странный макрос
#define HIBYTE(l) ((l & 0xffff) >> 8)
может лучше
#define HIBYTE(l) ((l>> 8 ) & 0xff)
не рекомендуется использовать маленькое Л (очень похоже на единицу)

c2[k] = (a2 << b2[j]) ? a2[i++] : b2[j++];

зачем такие сложность
инкремент проходит не на каждой итерации (так надо?)
сдвиг вместо сравнения опечатка?
Куда проходит запись?
*a2 = HIBYTE(c[k]);
*b2 = LOBYTE(c[k]);
С уважением Валерий

Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!