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

question-closed hex number co jest źle z funkcją

Object Storage Arubacloud
0 głosów
294 wizyt
pytanie zadane 22 lipca 2019 w C i C++ przez niezalogowany
zamknięte 13 listopada 2019

Może ktoś mi powiedzieć co jest nie tak z tą częścią funkcji do wyświetlania liczb 16-kowo

///https://www.technical-recipes.com/2012/number-conversions-in-c/

#include <iostream>
#include <bitset>

using namespace std;
void alamakota(){
         std:: string bit_string {"01000101001111110100010100111111"};
   ///************************************************************
    for (int i=0; i<32; i+=8)
    {
        std::bitset<8> b3(bit_string, i, 8);
        std::string podwojny=b3.to_string();
        std::bitset<4> first(podwojny, 0, 4);
        std::bitset<4> second(podwojny, 4, 8);
        char ch_f = static_cast<char>(std::bitset<4>(first.to_string()).to_ulong() + 48);
        if(((int)ch_f)>57)
            ch_f+=39;
        char ch_s = static_cast<char>(std::bitset<4>(second.to_string()).to_ulong() + 48);
        if(((int)ch_s)>57)
            ch_s+=39;
        if((ch_f==ch_s) && (ch_f='0'))
            ch_s=' ';
    std::cout<<ch_f<<ch_s<<' ';

    }
    std::cout<<std::endl;
    return ;
}

i czy da się podobny efekt uzyskać przy przesunięcu bits>>=4;

  std::bitset<sizeof(float)*CHAR_BIT> bits(data.output);

    std:: string mystring = bits.to_string<char,
                 std::char_traits<char>,
                 std::allocator<char> >();
    std::cout<<mystring<<std::endl;

 bits>>=4;

 mystring = bits.to_string<char,
                 std::char_traits<char>,
                 std::allocator<char> >();
    std::cout<<mystring<<std::endl;

A i nie chodzi mi jak korzystać z cout, bardziej chodzi mi jak poruszać się po tablicy bitów

komentarz zamknięcia: najlepsza
komentarz 22 lipca 2019 przez tkz Nałogowiec (42,000 p.)

Bardzo syfiasty kod. Co w sumie chcesz nim osiągnąć? 

https://en.cppreference.com/w/cpp/io/manip/hex

komentarz 23 lipca 2019 przez niezalogowany
edycja 23 lipca 2019
Przecież piałem że nie chodzi mi o cout i iomanip. Bo to co zrobiłem da się zrobić dużo szybciej z i krócej, ze źródła które podałem. Bardziej me interesuje jak efektywnie poruszać się po tablicy bitów i operacje bitowe, bo tego nie umiem. A myślę, że to warto znać. A przede wszystkim jak poprawnie 4 bitów uzyskać jeden bajt jako char.

Tak ogólnie bit to albo 0 albo 1 a bajt już zawiera informacje w "pewnym stopniu z formatowaną".

Tak jak pisałem wcześniej, z bitów jestem zielony a myślę że to bardzo pożyteczna sprawa.

Np chciałem kiedyś skopiować tablicę nie po elemencie tylko np od razu po 100 elementów, ustawiłem zmienną o szerokości 100 elementów i nic figa z makiem. A jak bym bity skopiował to myślę ze by się udało.
komentarz 23 lipca 2019 przez tkz Nałogowiec (42,000 p.)

Naucz się zadawać pytania i jasno określać problem, a nie wklejasz byle co i "a niech się domyślą". 

i czy da się podobny efekt uzyskać przy przesunięcu bits>>=4;

Podobny efekt do czego?

https://pl.wikipedia.org/wiki/Przesuni%C4%99cie_bitowe

https://pl.wikipedia.org/wiki/Operacje_bitowe

komentarz 23 lipca 2019 przez niezalogowany
Sorry tzk rzeczywiście chodziło mi o cout, ale o tym nie wiedziałem. Rzeczywiście może źle zadałem pytanie. Po prostu co drugi znak "bluzga chciałem wsadzić" i nie wiedziałem jak. Tyle zapału włożyłem, a komp i tak robi swoje.

1 odpowiedź

0 głosów
odpowiedź 23 lipca 2019 przez j23 Mędrzec (194,920 p.)
wybrane 23 lipca 2019
 
Najlepsza
    unsigned v = 666;
    unsigned shift = 28;
    
    while (shift) {
        std::cout << "0123456789ABCDEF"[(v >> shift) & 0xF]; 
        shift -= 4;
    }

O to chodzi?

komentarz 23 lipca 2019 przez niezalogowany
edycja 23 lipca 2019
Jak zawsze ciekawie. Chyba właśnie oto. Aczkolwiek nie wiem czy dobrze rozumiem. Wyświetla ostatnie 4 bity heksagonalnie jak tak to oto. Przynajmniej na początku takie były zamierzenia (później to mnie poniosła fantazja).

Sprawdziłem tak  oto na początku chodziło. Dzięki.
komentarz 28 lipca 2019 przez niezalogowany
edycja 28 lipca 2019

@j23,

Czy była możliwość podpowiedzi, pod jakim hasłem szukać części wyrażenia ""[];

Znaczy się yo co robi ten konkretny kod to jest dla mnie jasne. Bardziej mnie interesuje co jeszcze potrafi ""[]; Czy tylko zamianę znaków?

komentarz 28 lipca 2019 przez j23 Mędrzec (194,920 p.)

To operator indeksowania ;) Zapis:

std::cout << "tekst"[index]; 

to to samo co:

const char* str = "tekst";

std::cout << str[index]; 

tylko krótsze.

komentarz 28 lipca 2019 przez niezalogowany
Dzięki to takie proste? Myślałem, że to bardziej złożone bo chyba podobnie zmienia się znaki na polskie.
komentarz 28 lipca 2019 przez j23 Mędrzec (194,920 p.)
Co masz na myśli? Konwersję?
komentarz 28 lipca 2019 przez niezalogowany
Nie wiem, możliwe że oto mi chodzi. Ale szczerze nie wiem.

"0123456789ABCDEF" - jak pozmieniam znaki no to mam co innego.

(v >> shift)  - to w miarę oczywiste, aczkolwiek ciekawe, bo long 32bity chyba, a skąd dodatkowe 4 bity?

0xF- to zamiana na szesnastkową liczbę?

Ale tak naprawdę mnie interesuje co jeszcze można w ten nawias powkładać i między cudzysłowowy i gdzie tego szukać?
komentarz 28 lipca 2019 przez j23 Mędrzec (194,920 p.)

a skąd dodatkowe 4 bity?

Nie rozumiem pytania. Jakie 4 bity?

0xF- to zamiana na szesnastkową liczbę?

Nie, to wycina wszystko poza czterema najmłodszymi bitami, dzięki czemu będę miał wartość z przedziału od 0 do 15.  Tą wartością indeksuje literał tekstowy w celu otrzymania odpowiedniej "cyfry" szesnastkowej.

 

Poczytaj sobie o operacjach bitowych.

komentarz 28 lipca 2019 przez niezalogowany
edycja 28 lipca 2019
Nie rozumiem pytania. Jakie 4 bity?

std::cout << "0123456789ABCDEF"[(v >> 32) & 0xF]<<endl;  nie powinno zadziałać, a wyświetla ostatnia "cyfrę".

Dzięki z wytłumaczenie 0xF ;
komentarz 28 lipca 2019 przez j23 Mędrzec (194,920 p.)

Jeśli v jest typem 32-bitowym i bez znaku, to powinno być wyświetlone zero.

Co do poleceń to nie mam nic, co mógłbym Ci szczególnie polecić. Po prostu poszukaj w google info na ten temat. Na pewno znajdziesz coś, co w sposób przystępny wytłumaczy zagadnienie.

komentarz 28 lipca 2019 przez niezalogowany
Jeszcze raz dzięki z tą wiedzą szukanie jest znacznie prostsze.

Podobne pytania

0 głosów
1 odpowiedź 206 wizyt
pytanie zadane 20 marca 2016 w C i C++ przez Yari27 Początkujący (410 p.)
+2 głosów
3 odpowiedzi 115 wizyt
pytanie zadane 24 sierpnia 2023 w C# przez Mati336 Użytkownik (560 p.)
0 głosów
1 odpowiedź 289 wizyt
pytanie zadane 20 marca 2018 w C i C++ przez program naczelny Gaduła (3,320 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 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!

...