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