Я пытаюсь преобразовать шестнадцатеричную строку (переменной длины) в целое число со знаком (мне нужны положительные или отрицательные значения).
[Int16] [int 32] и [int64] кажется, что отлично работает с шестнадцатеричными строками длиной 2,4 байт, но я застрял с 3-байтовыми строками [int24] ( нет такой команды в powershell ).
Вот что у меня сейчас (фрагмент):
$start = $mftdatarnbh.Substring($DataRunStringsOffset+$LengthBytes*2+2,$StartBytes*2) -split "(..)"
[array]::reverse($start)
$start = -join $start
if($StartBytes*8 -le 16){$startd =[int16]"0x$($start)"}
elseif($StartBytes*8 -in (17..48)){$startd =[int32]"0x$($start)"}
else{$startd =[int64]"0x$($start)"}
С приведенным выше кодом значение $ start «D35A71» дает «13851249» вместо «-2925967». Я попытался найти способ реализовать два дополнения, но заблудился. Есть ли простой способ сделать это правильно?
Заранее спасибо
Редактировать : По сути, я думаю, что мне нужно реализовать что-то вроде этого:
int num = (sbyte)array[0] << 16 | array[1] << 8 | array[2];
как видно здесь .
Только что попробовал это:
$start = "D35A71"<br>
[sbyte]"0x$($start.Substring(0,2))" -shl 16 -bor "0x$($start.Substring(2,2))" -shl 8 -bor "0x$($start.Substring(4,2))"
, но, похоже, не получил правильный результат: - /