Szyfrowanie, łączenie dwóch liczb 16-bitowych w jedną

0

user image

Mam tu problem z zadaniem. Użytkownik podaje 16-bitową liczbę całkowitą (short int) i ta liczba jest szyforwana inną 16-bitową liczbą całkowitą (też short int). No i tam w zadaniu jest napisane, że klucz i liczbę zaszyfrowaną czyli dwa short inty jak rozumiem łączymy w jednego inta tak aby utworzyć wiadomość z tym, że klucz ma zajmować młodsze pozycje. No i nie mam pojęcia jak to zrobić, tzn. nie wiem połączyć dwie liczby 16-bitowe w jedną 32-bitową. Jak ktoś mi pomoże będę bardzo wdzięczny.

0

Najprościej?

	unsigned short int foo[2];
	foo[0]=1;
	foo[1]=1;
	unsigned int bar = *reinterpret_cast<int*>(foo); 

Da nam to w efekcie 65537 czyli 00000000000000010000000000000001 czyli to co chcieliśmy

0

A da się bez wskaźników?

0

Na upartego to wszystko się da.

union foo{
	unsigned short int bar[2];
	unsigned int baz;
};
//
	foo zmienna;
	zmienna.bar[0]=1;
	zmienna.bar[1]=1;
	unsigned int scalenie = zmienna.baz
2

Nie można po prostu tak?
scalone = a | (b << 16)

0

A wracając do mojego algorytmu to jak zanegować jakiś pojedyńczy bit w liczbie. Przykładowo mam liczbę 17(10) czyli binarnie 10001(2). Chciałym zanegować powiedzmy drugi bit tej liczby czyli otrzymać liczbę 11001(2)=25(10).

1

To co masz w treści zadania to ~(liczba ^ klucz)

1 użytkowników online, w tym zalogowanych: 0, gości: 1