Что нового

Конвертация в HEX

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Доброго времени суток. После долгого простоя решил размяться и модифицировать небольшой кусок того, что делал раньше, и старый результат конвертировать в HEX. Пробую делать так:
Код:
#include <String.au3>
Global $strVendorSpecific[0], $hex[0]

$objWMIService = ObjGet("winmgmts:\\" & @ComputerName & "\root\WMI")
$colItems = $objWMIService.ExecQuery("SELECT * FROM MSStorageDriver_ATAPISmartData", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
   $iCnt = 1
       For $Item In $colItems
            $strVendorSpecific = $Item.VendorSpecific
            _ArrayDisplay($strVendorSpecific,"Спецификация")
       For $z = 0 to UBound($strVendorSpecific) - 1
       _ArrayAdd($hex, _StringToHex($strVendorSpecific[$z]))
       Next
_ArrayDisplay($hex, 'HEX')
     $iCnt +=1
  Next

Оно то конвертирует, но результат странный. Я конечно не большой знаток всех этих переводов-конвертаций, но когда я делаю в PowerShell нечто подобное, то получаю совсем не тот результат. Там именно то, что мне нужно.
Ковертация в PowerShell:
$o = Get-WmiObject -Class MSStorageDriver_ATAPISmartData -Namespace 'root/wmi' | select-object  -first 1
$c =  ((([System.BitConverter]::ToString($o.VendorSpecific))) -replace '\-', "`n" )
write-output $c
Хотелось бы и с помощью autoit получить такой же результат
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
замени
Код:
_ArrayAdd($hex, Hex($strVendorSpecific[$z]))


на вид результат был неодинаков , ибо в функции _StringToHex строка переводится в бинарный вид, а потом уже в hex
 
Автор
D

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
на вид результат был неодинаков
Почти как в PowerShell, только 6 нулей перед значением. Не знаю, насколько это правильно, но попробую дальше использовать. В крайнем случае придется вручную откидывать нули
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ответы верны. нули и есть нули. можно сделать так
Код:
Local $hexres
For $Item In $colItems
    $strVendorSpecific = $Item.VendorSpecific
;~     _ArrayDisplay($strVendorSpecific, "Спецификация")
    For $z = 0 To UBound($strVendorSpecific) - 1
        $hexres = Hex($strVendorSpecific[$z], 2); 2 - количестве возвращаемых символов
        If StringReplace($hexres, '0', '') <> '' Then
            _ArrayAdd($hex, $hexres)
        Else
            _ArrayAdd($hex, '')
        EndIf
    Next
    _ArrayDisplay($hex, 'HEX')
Next
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
StringReplace делает замену всех сходных символов в строке. достаточно и одного нуля)
к тому же,в примере возвращается только два последних символа
 
Автор
D

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
к тому же,в примере возвращается только два последних символа
У меня были такие значения, где все нули, и поле оказывалось пустым. Честно говоря, пока не знаю что лучше, оставить пустым или с нулями.
 
Верх