Szyfrowanie danych

0

Witajcie!

Potrzebuję sposobu, za pomocą którego zamienię za pomocą operatorów logicznych, np. zmienną 16 bitową i 32 bitową w jedną 48 bitową. Muszę to zrobić w taki sposób, żeby można było to potem odszyfrować.

Czy ktoś wie jak to zrobić? :)
Z góry dzięki!

0

Tak:

let a: u16;
let b: u32;

let c: u48 = ((a << 32) as u48) | (b as u48);

Dekodowanie:

let a: u16 = (c >> 32) as u16;
let b: u32 = c as u32;
0

Dzięki! Czy mógłbyś mi jeszcze napisać, co to jest 'let'? Przy wpisywaniu w google "c++ let" na różne sposoby, nie znajduje nic właściwego ze względu na popularność słowa w innych artykułach...

0

Możesz uznać to w tym przypadku za formę pseudojęzyka, który służył mi tylko do opisu rozwiązania (a tak serio to jest to składnia Rusta, tylko tam nie ma typu u48).

A tak serio to nie wiem czemu w tytule masz "szyfrowanie" skoro moje rozwiązanie nic nie szyfruje tylko przemiennie zapisuje liczby w 48 bitowej zmiennej. Po zakodowaniu (nie mylić z zaszyfrowaniem) będzie to wyglądało tak:

+--------------------+----------------------------------------+
|     16-bit int     |               32-bit int               |
+--------------------+----------------------------------------+
0

Zadanie na tym polega, żeby za pomocą operatorów logicznych zamienić kilka zmiennych, np. 3 bitową, 7 bitową i 14 bitową w jedną 24 bitową. I potem napisać drugą funkcję która deszyfruje tą zmienną i rozbija na te poprzednie 3, 7 i 14 :) W opisie zadania jest szyfrowanie, więc tak też tutaj napisałem :)

Dokładnie chodziło o operatory bitowe, a nie logiczne. Mój błąd.

I nie o szyfrowanie, a o kodowanie... Nie wiem skąd mi się to wzięło...

0

np. zmienną 16 bitową i 32 bitową w jedną 48 bitową.

żeby za pomocą operatorów logicznych zamienić kilka zmiennych, np. 3 bitową, 7 bitową i 14 bitową w jedną 24 bitową.

Zdecyduj się w końcu czy masz wykorzystać 24 bity, czy 48 bitów.

0

Podałem analogiczny przykład (a przynajmniej tak mi się wydaję). Dokładnie mam 6 liczb (int). Liczby mają 17, 7, 17, 7, 13, 3 bitów (suma 64) i mają być zakodowane w jednej zmiennej typu unsigned long long, w taki sposób żeby można było je później odkodować.

1

To je sobie ustawiasz i zapisujesz. Jaki jest w tym problem? Więcej, pisząc w C możesz użyć unii i bitfields:

union foo {
  struct {
    int a : 17;
    int b : 7;
    int c : 17;
    int d : 7;
    int e : 13;
    int f : 3;
  } bar;
  uint64_t baz;
}

I masz załatwiony cały cyrk na raz.

0

Nie, to na pewno nie jest rozwiązanie problemu. Muszę wykombinować prawdopodobnie XORowanie i przesunięcia bitowe tak żeby wszystko zmieścić w tej jednej zmiennej 64 bitowej i odkodować to później.

0

Nie potrzebujesz XOR. Potrzebujesz OR, AND i przesunięcie bitowe. Skoro wiesz jak każda z tych funkcji działa, to teraz to zrób na kartce. Przecież to nie jest inżynieria rakietowa.

0

Ja myślałem w ten sposób to zrobić, o ile to możliwe...
user image

0

To tak zrób.

0

Napisałem za pomocą OR, AND i przesunięć i działa.. działa jednak nie dla wszystkich liczb. Jeśli zmienię liczby w mainie to przy niektórych działa poprawnie, a przy niektórych dekoduje kompletne głupoty... Nie mam pojęcia o co chodzi
http://pastebin.com/AJahAQ07

0

I to tylko dla pierwszej wartości, reszta o dziwo jest ok.

0

Poradziłem sobie, temat można zamknąć. Dzięki wszystkim za próbę pomocy!

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