• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Int jako bajty

Object Storage Arubacloud
0 głosów
1,128 wizyt
pytanie zadane 30 listopada 2020 w C i C++ przez ResCrove Obywatel (1,700 p.)

Zaprojektuj unię o nazwie byte_set, która pozwala rozbić liczbę typu int tak, aby możliwe było wyświetlenie wszystkich jej bajtów składowych. Rozmiar unii musi być równy rozmiarowi typu int natomiast liczba pól unii byte_set nie może przekroczyć dwóch.

Deklaracje unii zamieść w pliku byte_set.h.

  • Jak z wyświetlonych bajtów 68 67 66 65 powstaje wartość 1094861636?
  • Jak nazywa się kolejność 68 67 66 65 i 65 66 67 68?

Przykładowe poprawne wyniki programu:

Podaj liczbe: 1094861636
68 67 66 65
Podaj liczbę: 1
1 0 0 0 
  • Do pobierania danych od użytkownika wykorzystaj funkcję scanf, a do wyświetlania printf.
  • W programie nie wolno korzystać z operatora [], oprócz deklaracji tablicy.
  • W programie nie wolno używać struktur.
  • W programie nie wolno używać biblioteki stdint.
  • W programie nie wolno używać operatorów bitowych <<, >>, | oraz &.

byte_set.h :

#pragma once
union byte_set
{
    int x;
    char tab[4];
};

 main:

#include <stdio.h>
#include "byte_set.h"

int main()
{
    union byte_set byte_set;

    printf("Podaj liczbe: ");
    if(scanf("%d", &byte_set.x) != 1)
    {
        printf("Incorrect input");
        return 1;
    }
    for(int i = 0; i < 4; i++)
    {
        printf("%02X ", *(byte_set).tab+i);
    }
    return 0;
}

Dlaczego w moim programie liczby te nie wyświetlają się tak jak powinny?

2 odpowiedzi

+2 głosów
odpowiedź 30 listopada 2020 przez adrian17 Ekspert (344,860 p.)
wybrane 30 listopada 2020 przez ResCrove
 
Najlepsza

A jak się wyświetlają? :)

Na pewno jedna obserwacja:

*(byte_set).tab+i

Kolejność wykonywania działań :) To raczej powinno być:

*(byte_set.tab+i)

// lub byte_set.tab[i]

 

komentarz 30 listopada 2020 przez ResCrove Obywatel (1,700 p.)
Po wpisaniu 1 wyświetliło się 1 2 3 4, a po zmianie tego co napisałeś jest poprawnie i wyświetla się 1 0 0 0
komentarz 30 listopada 2020 przez ResCrove Obywatel (1,700 p.)

Ale jednak liczba 

1094861636

Nie wyświetla się jako:

68 67 66 65

A wyświetla się

44 43 42 41

komentarz 30 listopada 2020 przez Scheduler Mądrala (6,950 p.)

Zamień w printf X na d, a powinno wszytko działać.

EDIT:

printf("%02d ", *(byte_set.tab + i));

X jest hex, a d formatuje Ci to w decymalnych.

komentarz 30 listopada 2020 przez ResCrove Obywatel (1,700 p.)
Już jest troche lepiej ale jeszcze nie wiem dlaczego dla liczby

-31589

wypisuje
-101 -124 -1 -1

jak pierwsza liczba to powinno być 155
komentarz 30 listopada 2020 przez ResCrove Obywatel (1,700 p.)
@Scheduler problem zaczyna się gdy liczba jest większa niż 128 dla 129 już podaje ujemne
+3 głosów
odpowiedź 30 listopada 2020 przez tangarr Mędrzec (154,860 p.)

Troszkę namieszałeś w dobieraniu się do wartości w tablicy tab.

printf("%02X ", *(byte_set.tab+i));

lub jeszcze lepiej

printf("%02X ", byte_set.tab[i]);

Pamiętaj, że liczby zostaną wyświetlone w postaci szesnastkowej.

komentarz 30 listopada 2020 przez ResCrove Obywatel (1,700 p.)
Racja, już poprawione i teraz działa, musze korzystać z wskaźników także pierwsza forma idealna
komentarz 30 listopada 2020 przez ResCrove Obywatel (1,700 p.)

@tangarr,

Ale jednak liczba 

1094861636

Nie wyświetla się jako:

68 67 66 65

A wyświetla się

44 43 42 41

Podobne pytania

0 głosów
1 odpowiedź 388 wizyt
pytanie zadane 21 stycznia 2019 w C i C++ przez krzycholl18 Nowicjusz (220 p.)
0 głosów
0 odpowiedzi 74 wizyt
pytanie zadane 11 maja 2020 w C# przez JakSky Stary wyjadacz (14,770 p.)
0 głosów
0 odpowiedzi 234 wizyt
pytanie zadane 18 stycznia 2019 w Java przez Piotr Kusnierkiewicz Użytkownik (670 p.)

92,581 zapytań

141,433 odpowiedzi

319,666 komentarzy

61,966 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...