Консультация № 174335
18.11.2009, 03:31
0.00 руб.
0 1 1
Помогите пожалуйста написать программу на C под Linux :Написать функцию, меняющую старшую половину байта с младшей
( 0xAB ® 0xBA ). Результат вывести на экран в шестнадцатеричном виде.

Обсуждение

Неизвестный
18.11.2009, 05:49
общий
это ответ
Здравствуйте, plusvv.
Программа. С. Компилировал gcc. В программе несколько примеров решения Вашей задачи.
Код:
#include <stdio.h>

// 1й пример
unsigned char swapByteLoHi1(unsigned char byte)
{
struct byteParts
{
unsigned lo:4;
unsigned hi:4;
}* pByteParts;
pByteParts=(struct byteParts*)&byte;
return pByteParts->lo<<4 | pByteParts->hi;
}

// 2й пример
unsigned char swapByteLoHi2(unsigned char byte)
{
return (byte<<4) | (byte>>4);
}

// 3й пример
unsigned char swapByteLoHi3(unsigned char byte)
{
// AT&T Assembler(не Intel!!!)
asm("rorb $4,%%al":"=al"(byte):"al"(byte));
return byte;
}

int main()
{
unsigned char byte=0xab;
printf("Вначале:%X\n",byte);
printf("После перестановки:%X\n",swapByteLoHi1(byte));
printf("После перестановки:%X\n",swapByteLoHi2(byte));
printf("После перестановки:%X\n",swapByteLoHi3(byte));
return (0);
}

Вывод программы:
Код:
/home/micren/Projects/174335-c/Debug/src/174335_c 
----------------------------------------------
Вначале:AB
После перестановки:BA
После перестановки:BA
После перестановки:BA

----------------------------------------------
Program exited successfully with errcode (0)
Press the Enter key to close this terminal ...
Форма ответа