wiem, że mogę wyodrębnić bajtów z int tak:Konkatenowanie bajtów do liczby całkowitej lub krótki zachowaniu znak
bytes[] IntToBytes(int i)
{
return new byte [] {(byte) ((i >> 8) & 0xff), (byte) (i & 0xff)};
}
które następnie wysłać jako część transmisji szeregowej. Ale czy mogę zrobić odwrotnie, po otrzymaniu sekwencji bajtów, zrekonstruować oryginalne dane, zachowując znak. Obecnie robię to, ale czuję się nieco przesadzony:
int BytesToInt(byte hi, byte lo)
{
return ((hi << 24) | (lo << 16)) >> 16;
}
Czy istnieje inny sposób lub lepszy sposób? Czy robi to różnicę, jeśli wiem, że ostatecznie mam do czynienia tylko z podpisanymi 16-bitowymi danymi?
Czy to odpowiada na twoje pytanie? http://stackoverflow.com/questions/2538390/convert-16-bit-signed-int-to-2-bits –
@josh BitConverter wygląda idealnie, pod warunkiem pozytywnego wyniku testu endian. – Graham
'(int) BitConverter.ToInt16 (nowy [] {lo, cześć}, 0);' – Sinatr