Jedna lepiaca (ako spojit dva bajty do int)
Jaroslav Buchta
jaroslav.buchta na hascomp.cz
Čtvrtek Leden 5 16:36:18 CET 2017
Co s tim vyvadite za silenosti, staci se podivat do windef.h na peknou
silenost a jsou tam i dalsi uzitecna makra... ;-)
Ale smysl nekterych pretypovani mi unika... mozna optimalizace na 32b
architekturu?
#define LOBYTE(w) ((BYTE)((DWORD_PTR)(w) & 0xFF))
#define HIBYTE(w) ((BYTE)((DWORD_PTR)(w) >> 8))
#define LOWORD(l) ((WORD)((DWORD_PTR)(l) & 0xFFFF))
#define HIWORD(l) ((WORD)((DWORD_PTR)(l) >> 16))
#define MAKEWORD(low,high) ((WORD)(((BYTE)((DWORD_PTR)(low) & 0xFF))
| ((WORD)((BYTE)((DWORD_PTR)(high) & 0xFF))) << 8))
#define MAKELONG(low,high) ((LONG)(((WORD)((DWORD_PTR)(low) &
0xFFFF)) | ((DWORD)((WORD)((DWORD_PTR)(high) & 0xFFFF))) << 16))
S tim nasobenim bych byl opatrny, aby to slabsi prekladac nechapal jako
ze chcete opravdu nasobit ;-)
Dne 05.01.2017 v 13:26 Josef Štengl napsal(a):
> To záleží na tom, co si představujete pod typem byte :-)
>
> Dne 5.1.2017 v 11:22 balu napsal(a):
>> A funguje to, ak ide o dve casti cisla zakodovaneho v 2's complement?
>>
>>> On 5. 1. 2017, at 11:20, Petr Zapadlo <zapik na email.cz> wrote:
>>>
>>> vzal bych to strašně jednoduše:
>>>
>>> int vysledek=blow+(bhigh*256);
>>>
>>> Petr
>>>
>>>
>>> Dne 5.1.2017 v 11:09 balu napsal(a):
>>>> Ked sa uz o tom lepeni ve sroubarne bavime, mal by som jednu
>>>> zaciatocnicku...
>>>>
>>>> MCP3428 na ktory som sa pytal funguje vyborne, teraz by som rad
>>>> dalej spracoval data... Po I2C zbernici dostavam data z AD
>>>> prevodnika, idu po sebe dva bajty, najprv horny a potom spodny.
>>>> Vystup ma byt signed 16-bitovy integer.
>>>>
>>>> Otazka je ako ich spravne skombinovat do jedneho intu? V tom
>>>> hnusnom prostredi pre ten hnusny procesor ma int dva bajty, ziadnu
>>>> portovatelnost na ine platformy nepotrebujem. Mozeme skusit dve
>>>> riesenia, jedno co bude fungovat v tomto konkretnom pripade a jedno
>>>> genericke, uplne korektne. Rad by som sa naucil ako nato...
>>>>
>>>> dakujem,
>>>> b.
>>>>
>>>>
>>>>
>>>> // read channel value
>>>> Wire.requestFrom(0x68, 2); // request 2 bytes from slave device
>>>> #68
>>>> while (Wire.available()) { // slave may send less than requested
>>>> byte bhigh = Wire.read();
>>>> byte blow = Wire.read();
>>>> return( ((unsigned int)bhigh << 8) + blow ); <<<--- tutoka
>>>> }
>>>> _______________________________________________
>>>> HW-list mailing list - sponsored by www.HW.cz
>>>> Hw-list na list.hw.cz
>>>> http://list.hw.cz/mailman/listinfo/hw-list
>>>
>>> _______________________________________________
>>> HW-list mailing list - sponsored by www.HW.cz
>>> Hw-list na list.hw.cz
>>> http://list.hw.cz/mailman/listinfo/hw-list
>>
>> _______________________________________________
>> HW-list mailing list - sponsored by www.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>>
> _______________________________________________
> HW-list mailing list - sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
Další informace o konferenci Hw-list