Autor: Dondu
Kurs języka C: Tips & Tricks - Spis treści
Język C nie oferuje instrukcji zamiany bajtów liczby 16-bitowej (typ: short). Taką zamianę należy realizować własnym kodem.
Poniżej przykład oparty o przesunięcia bitowe. Wykorzystujemy tutaj priorytety języka C oraz fakt, iż podczas przesuwania tracone są "wypadające bity". W rezultacie otrzymujemy liczbę z zamienionymi miejscem bajtami.
Zobacz jak to działa w kompilatorze CManiak.
Przykład 1 (w kompilatorze)
//zmienna 16-bit, której bajty chcemy zamienić miejscami unsigned short a = 0x1234; //zamień bajty a = (a<<8) | (a>>8);
Możesz oczywiście zdefiniować sobie funkcję, która ułatwi Ci wykorzystanie kodu w swoim programie.
Przykład 2 (w kompilatorze)
//funkcja zamieniająca bajty short swap_bytes(unsigned short temp){ return (temp<<8) | (temp>>8); } int main(void){ //zmienna 16-bit, której bajty chcemy zamienić miejscami unsigned short a = 0x1234; //zamień bajty wykorzystując zdefiniowaną wyżej funkcję a = swap_bytes(a); }
Działanie przykładu nr 2 także możesz sprawdzić w kompilatorze CManiak.
Kurs języka C: Tips & Tricks - Spis treści
31
nie ma sensu tu stosować funkcji. Dużo lepszym pomysłem byłoby makro preprocesora (nie korzystamy w funkcji ze stosu, więc byłoby po prosti szybciej)
OdpowiedzUsuńRaczej powinno się za wszelką cenę unikać makr. W tym przypadku makro nic nie daje - kompilator nie jest głupi i taką prostą funkcję osadzi w miejscu wywołania, w związku z tym nie będzie żadnych narzutów.
Usuń