2016-06-03 14 views
1

Ist ihre Möglichkeit, 2 Bytes in vorzeichenbehafteten Int zu konvertieren? Ich weiß, dass wir ein Byte in signed Int in folgender Weise konvertieren könnenKonvertieren von 2 Bytes in vorzeichenbehafteten int

byte B1= 0xFF; 
int r = Convert.ToSbyte((sbyte)B1); 

aber was ist mit 2 Bytes int signiert? Zum Beispiel -260 ist 0xFC, 0xFE

+3

Wenn dies ein Kommunikationsprotokoll ist, müssen Sie die Endian um zu wissen, der Architektur zuerst. Außerdem ist 2 byte signed integer ein 'short' (oder' Int16'), nicht 'int' (was' Int32' ist) in .NET. – Groo

Antwort

5

Bei einem Byte, nur zuordnen:

byte B1 = 0xFF; 
int r = B1; 

Bei zwei Bytes - addieren Verschiebung und zuordnen:

byte B1 = 0xFE; 
byte B2 = 0xFC; 

int r = (B1 << 8) | B2; 

falls Int16 gewünscht wird, dann wird gegossen:

// -260 
short s = (short) ((B1 << 8) | B2); 
+0

OP möchte wahrscheinlich ein signiertes 'Int16'. – Groo

+0

gute alte binäre Operatoren, sicher am effizientesten als jede Konverterklasse :) – Gusman

1

Werfen Sie einen Blick auf BitConverter class und ihre ToInt32() -Methode.

+0

Das wird in vorzeichenlose Ganzzahl konvertieren – prattom

+0

@ prattom BitConverter.ToInt32: * Gibt eine 32-Bit-Ganzzahl mit Vorzeichen von vier Bytes an einer angegebenen Position in einem Byte-Array konvertiert . * – Default

+0

Sorry, nicht vorzeichenlose Ganzzahl, aber der Bitkonverter gibt positive Ganzzahl statt negativer Ganzzahl für ex zurück. 0xFC, 0xFE wird als 65276 zurückgegeben, wenn ich die BitConverter-Klasse verwende, während -210 – prattom

7

das erste Byte Unter der Annahme, das msb:

 byte b1 = 0xff; 
     byte b2 = 0xff; 
     var test = BitConverter.ToInt16(new byte[] { b1, b2 }, 0); 

Ansonsten:

 byte b1 = 0xff; 
     byte b2 = 0xff; 
     var test = BitConverter.ToInt16(new byte[] { b2, b1 }, 0); 

Edit: "signiert"

+0

OP wahrscheinlich wahrscheinlich eine signierte 'Int16' . – Groo

+0

@Groo, danke bearbeitet – Kevin