Re: Jak to v C++ napsat líp?

Martin Záruba swz na volny.cz
Čtvrtek Srpen 31 09:08:32 CEST 2023


To není 0xa0 0xb0, ale znaky AB, tedy 0x41 0x42. To pole je uint16_t 
proto, aby se s ním rozumně pracovalo, ale pak se přenáší na server jako 
sekvence byte. No a já do něj také potřebuji uložit text. Celý přenos je 
tak jediný příkaz

client.write((byte*)A,počet_znaků);

to pole je pochopitelně větší, než 2 znaky.

Martin Záruba

Dne 31.8.2023 v 8:31 Ladislav Vaiz napsal(a):
> On 31.08.2023 8:05, Martin Záruba wrote:
>> Mám pole
>>
>> int A[2];
>>
>> potřebuji do něj ale vložit  čtyři znaky ABCD. Vymyslel jsem
>>
>> A[0] = ('A' << 8) | 'B';
>> A[1] = ('C' << 8) | 'D';
>>
>> nejde to nějak líp? Toto funguje, ale je to docela nesrozumitelné.
>>
> Pokud je to signed char a někdy místo ABCD použijete znaky >=128, tak 
> vám tam asi začnou přebývat 0xff :-)
>
> Doporučuji přetypovat na unsigned.
>
>
>
> #include <stdio.h>
> #include <stdint.h>
>
> int main(){
>     signed char c1 = 0xa0;
>     signed char c2 = 0xb0;
>     int16_t a = (c1 << 8) | c2;
>
>     printf("%x\n", (unsigned int)a);
> }
>
>
>  ./a.out
> ffffffb0
>
> L.
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20230831/b6684a79/attachment-0001.htm>


Další informace o konferenci Hw-list