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

Int jako bajty

VPS Starter Arubacloud
0 głosów
1,428 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 (349,240 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 (155,140 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ź 434 wizyt
pytanie zadane 21 stycznia 2019 w C i C++ przez krzycholl18 Nowicjusz (220 p.)
0 głosów
0 odpowiedzi 78 wizyt
pytanie zadane 11 maja 2020 w C# przez JakSky Stary wyjadacz (14,770 p.)
0 głosów
0 odpowiedzi 242 wizyt
pytanie zadane 18 stycznia 2019 w Java przez Piotr Kusnierkiewicz Użytkownik (670 p.)

92,975 zapytań

141,938 odpowiedzi

321,181 komentarzy

62,302 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...