Convertire due valori a 16 bit in uno a 32 bit

venerdì 02 maggio 2008 - 10.45

denis.basei Profilo | Senior Member

Salve a tutti.

Mi sto cimentando nella revisione di un protocollo di comunicazione con un plc. Ho un problema con l'interpretazione di certi valori. Per spiegarmi meglio faccio un esempio:
Il valore -150000 mi viene restituito dal plc con due valori con segno a 16 bit, rispettivamene -18928 e -3. Un metodo analogo di restituzione, questa volta senza segno, è con i valori 46608 e 65533.
Naturalmente per il mio programma -150000 è il valore da calcolare, indifferentemente da una delle due coppie di valori. Qualcuno sa aiutarmi a trovare l'algoritmo di calcolo, al limite anche solo a spiegarlo, col quale calcolare -150000?



Grazie.

Denis B. - www.baseiengineering.com

Brainkiller Profilo | Guru

>Mi sto cimentando nella revisione di un protocollo di comunicazione
>con un plc. Ho un problema con l'interpretazione di certi valori.
>Per spiegarmi meglio faccio un esempio:
>Il valore -150000 mi viene restituito dal plc con due valori

Da dove deriva il -150000 ? Perchè anche con 2 interi a 16 bit non si può arrivare a 150 mila.

>Naturalmente per il mio programma -150000 è il valore da calcolare,
>indifferentemente da una delle due coppie di valori. Qualcuno
>sa aiutarmi a trovare l'algoritmo di calcolo, al limite anche
>solo a spiegarlo, col quale calcolare -150000?

Beh come saprai, forse ho capito male io il tuo problema, ma come sai se un PLC o un qualunque device usa degli Int e sfora dai boundaries di quel tipo dati ricomincia dal lower bound.

Esempio se un int va da -1000 a +1000 e tu imposti come valore 1001 andrà a valorizzare come -1000 chiaramente se tu assegni un valore di 2 o 3 mila non saprai quante volte ha sforato.

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5