🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.c
12 messages
12 total messages Started by Borneq Wed, 03 Jan 2018 17:37
Zmiana Endiana
#309577
Author: Borneq
Date: Wed, 03 Jan 2018 17:37
2 lines
910 bytes
Jak przekonwertować między Big Endian a Little Endian w c++?
zmieniając 4 bajty w 32 bitwach z 0,1,2,3 na 3,2,1,0?
Re: Zmiana Endiana
#309578
Author: Sebastian Biały
Date: Wed, 03 Jan 2018 18:38
8 lines
1283 bytes
On 1/3/2018 6:37 PM, Borneq wrote:
> Jak przekonwertować między Big Endian a Little Endian w c++?
> zmieniając 4 bajty w 32 bitwach z 0,1,2,3 na 3,2,1,0?

https://stackoverflow.com/questions/2182002/convert-big-endian-to-little-endian-in-c-without-using-provided-func

Ogólnie potrzebujesz kupić książkę "Uczta programistów" gdzie są opisane 
setki hackerskich algorytmów manipulowania na poziomie bitow i bajtów.
Re: Zmiana Endiana
#309586
Author: Radoslaw Szwed
Date: Thu, 04 Jan 2018 09:44
8 lines
1193 bytes
Użytkownik "Borneq" <borneq@antyspam.hidden.pl> napisał w wiadomości news:p2j4cs$g35$1@node1.news.atman.pl...
> Jak przekonwertować między Big Endian a Little Endian w c++?
> zmieniając 4 bajty w 32 bitwach z 0,1,2,3 na 3,2,1,0?

Tak na marginesie przypomnę, że procesory od 486 mają sprzętowe rozwiązanie rozkaz
BSWAP reg32

Rozkaz zajmuje 2 bajty i 1 cykl zegara.
Re: Zmiana Endiana
#309581
Author: Borneq
Date: Thu, 04 Jan 2018 12:19
18 lines
1838 bytes
W dniu 03.01.2018 o 19:38, Sebastian Biały pisze:
> On 1/3/2018 6:37 PM, Borneq wrote:
>> Jak przekonwertować między Big Endian a Little Endian w c++?
>> zmieniając 4 bajty w 32 bitwach z 0,1,2,3 na 3,2,1,0?
> 
> https://stackoverflow.com/questions/2182002/convert-big-endian-to-little-endian-in-c-without-using-provided-func 
> 
> 
> Ogólnie potrzebujesz kupić książkę "Uczta programistów" gdzie są opisane 
> setki hackerskich algorytmów manipulowania na poziomie bitow i bajtów.

Mam tą książkę i czytałem, są tam funkcje na przykład na zliczanie 
jedynek w słowie. Tylko nie byłem pewien czy akurat tam było coś na 
temat zmiany Endiana. Tak mam, że często zadaję pytanie na lang.c czy 
programming bez próby szukania na przykład przez Google.
A oprócz Uczty Programistów, to tutaj albo na programming ktoś dał link 
na procedurę podającą czy w 4 lub 8 bajtach choć jeden jest zerowy (dla 
strlen)
Re: Zmiana Endiana
#309584
Author: Adam Wysocki
Date: Fri, 05 Jan 2018 12:18
12 lines
1351 bytes
Borneq <borneq@antyspam.hidden.pl> wrote:

> Tak mam, że często zadaję pytanie na lang.c czy programming bez próby szukania 
> na przykład przez Google.

Co skłania cię do myślenia, że czas innych, poświęcony na odpowiedź 
Tobie, jest mniej ważny niż Twój czas, który poświęcisz na wpisanie 
kilku słów w Google?

-- 
[ Email: a@b a=grp b=chmurka.net ]
[ Web:   http://www.chmurka.net/ ]
Re: Zmiana Endiana
#309582
Author: szykcech
Date: Fri, 05 Jan 2018 19:23
4 lines
1538 bytes
> Tak mam, że często zadaję pytanie na lang.c czy 
> programming bez próby szukania na przykład przez Google.

Co za debilizm i brak szacunku dla dyskutantów!!!
Re: Zmiana Endiana
#309587
Author: bartekltg
Date: Fri, 05 Jan 2018 19:41
14 lines
1895 bytes
On Thursday, January 4, 2018 at 10:45:26 AM UTC+1, Radoslaw Szwed wrote:
> Użytkownik "Borneq" <borneq@antyspam.hidden.pl> napisał w wiadomości news:p2j4cs$g35$1@node1.news.atman.pl...
> > Jak przekonwertować między Big Endian a Little Endian w c++?
> > zmieniając 4 bajty w 32 bitwach z 0,1,2,3 na 3,2,1,0?
> 
> Tak na marginesie przypomnę, że procesory od 486 mają sprzętowe rozwiązanie rozkaz
> BSWAP reg32
> 
> Rozkaz zajmuje 2 bajty i 1 cykl zegara.

Są nawet 'intrinsty', przynajmniej w gcc i VS. Dla 16/32/64 bitów. 

pzdr
bartekltg
Re: Zmiana Endiana
#309588
Author: Wojciech Muła
Date: Fri, 05 Jan 2018 21:36
30 lines
2617 bytes
On Friday, January 5, 2018 at 8:41:46 PM UTC+1, bartekltg wrote:
> On Thursday, January 4, 2018 at 10:45:26 AM UTC+1, Radoslaw Szwed wrote:
> > Użytkownik "Borneq" <borneq@antyspam.hidden.pl> napisał w wiadomości news:p2j4cs$g35$1@node1.news.atman.pl...
> > > Jak przekonwertować między Big Endian a Little Endian w c++?
> > > zmieniając 4 bajty w 32 bitwach z 0,1,2,3 na 3,2,1,0?
> > 
> > Tak na marginesie przypomnę, że procesory od 486 mają sprzętowe rozwiązanie rozkaz
> > BSWAP reg32
> > 
> > Rozkaz zajmuje 2 bajty i 1 cykl zegara.
> 
> Są nawet 'intrinsty', przynajmniej w gcc i VS. Dla 16/32/64 bitów. 

Nie ma potrzeby ich stosowania, taki kod

#include <cstdint>

uint32_t swap(const uint32_t x) {
    const uint32_t b0 = (x >> (0*8)) & 0xff;
    const uint32_t b1 = (x >> (1*8)) & 0xff;
    const uint32_t b2 = (x >> (2*8)) & 0xff;
    const uint32_t b3 = (x >> (3*8)) & 0xff;

    return (b0 << (3*8)) | (b1 << (2*8)) | (b2 << (1*8)) | b3;
}

zostanie przetłumaczony na jeden bswap przez GCC, clanga i MSVC.
Co ciekawe, intelowski kompilator nie umie tak. :)

w.
Re: Zmiana Endiana
#309589
Author: M.M.
Date: Sat, 06 Jan 2018 14:44
24 lines
2493 bytes
On Friday, January 5, 2018 at 10:36:55 PM UTC+1, Wojciech Muła wrote:
> Nie ma potrzeby ich stosowania, taki kod
> [...]
> zostanie przetłumaczony na jeden bswap przez GCC, clanga i MSVC
Niezłe! Aż trudno uwierzyć.

bswap w językach wysokiego poziomu można zaimplementować na wiele 
sposobów, jeśli coś zmienimy w kodzie który podałeś, to też sobie
kompilatory poradzą?

Można zmienić kolejność, mamy cztery instrukcje, więc silnia(4) już
24 możliwości. Po drugie, można wrzucić to do shortów, potem zamienić w 
shortach i złożyć inta z shortów w odwrotnej kolejności. W wersji z
shortami też można zastosować różną kolejność. W końcu można zrobić
jakąś unię i pola bitówe... 

Oni użyli jakiegoś algorytmu który generalnie rozpoznaje że chodzi o
zamianę kolejności, czy mechanicznie rozpoznają jedną procedurę?


> Co ciekawe, intelowski kompilator nie umie tak. :)
No w sumie tak, jeśli konkurencja potrafi, to czemu ten nie?

Pozdrawiam
Re: Zmiana Endiana
#309583
Author: Borneq
Date: Sat, 06 Jan 2018 16:50
14 lines
1818 bytes
W dniu 05.01.2018 o 13:18, Adam Wysocki pisze:
> Co skłania cię do myślenia, że czas innych, poświęcony na odpowiedź
> Tobie, jest mniej ważny niż Twój czas, który poświęcisz na wpisanie
> kilku słów w Google?

Po pierwsze, nie zawsze, w zdecydowanej ilości przypadków szukam,
po drugie, szukanie to nie tylko wpisanie kilku słów, bo może się okazać 
że większość co pokazuje Google to zapytania z odpowiedzią "poszukaj w 
Google" ;-) W takim razie odpowiedź na grupie pl.comp.lang.c pomoże nie 
tylko mnie ale i tym którzy szukają w Google.
A poza tym często jak zadam pytanie, to potem jeszcze szukam i sam 
zamieszczam odpowiedź, a lepiej niech będzie grupa żywa i będą tam 
pytania z odpowiedziami, niż gdyby miało tam być mało postów a mało 
postów jeszcze bardziej zniechęcało do użycia tej grupy.
Re: Zmiana Endiana
#309585
Author: M.M.
Date: Sat, 06 Jan 2018 18:50
10 lines
1903 bytes
On Saturday, January 6, 2018 at 5:50:30 PM UTC+1, Borneq wrote:
> [...]
> A poza tym często jak zadam pytanie, to potem jeszcze szukam i sam 
> zamieszczam odpowiedź, a lepiej niech będzie grupa żywa i będą tam 
> pytania z odpowiedziami, niż gdyby miało tam być mało postów a mało 
> postów jeszcze bardziej zniechęcało do użycia tej grupy.

Jeśli na grupie jest bardzo mały ruch, to ja popieram tę metodę.

Pozdrawiam
Re: Zmiana Endiana
#309590
Author: Wojciech Muła
Date: Tue, 09 Jan 2018 19:01
31 lines
3038 bytes
On Saturday, January 6, 2018 at 3:44:47 PM UTC+1, M.M. wrote:
> On Friday, January 5, 2018 at 10:36:55 PM UTC+1, Wojciech Muła wrote:
> > Nie ma potrzeby ich stosowania, taki kod
> > [...]
> > zostanie przetłumaczony na jeden bswap przez GCC, clanga i MSVC
> Niezłe! Aż trudno uwierzyć.
> 
> bswap w językach wysokiego poziomu można zaimplementować na wiele 
> sposobów, jeśli coś zmienimy w kodzie który podałeś, to też sobie
> kompilatory poradzą?
> 
> Można zmienić kolejność, mamy cztery instrukcje, więc silnia(4) już
> 24 możliwości. Po drugie, można wrzucić to do shortów, potem zamienić w 
> shortach i złożyć inta z shortów w odwrotnej kolejności. W wersji z
> shortami też można zastosować różną kolejność. W końcu można zrobić
> jakąś unię i pola bitówe... 

Strzelam, że nie wszystkie opcje zostaną rozpoznane. Ale ogólnie
to dobre zadanie dla studentów na laboratoria. Albo dla samego siebie,
jak się nudzisz. :)

> Oni użyli jakiegoś algorytmu który generalnie rozpoznaje że chodzi o
> zamianę kolejności, czy mechanicznie rozpoznają jedną procedurę?

Podejrzewam, że to jest wykonywane na etapie peephole optimization,
czyli wykonuje się pattern matching kilku sąsiednich instrukcji.

Weź pod uwagę, że ten etap jest na końcu, kiedy kompilator usunął
zbędne instrukcje, znormalizował cały kod itd.

w.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads