Что нового

Чтение из файла, преобразование и запись в ветку реестра значений

zigzagrus79

Новичок
Сообщения
31
Репутация
0
Приветствую уважаемые, имеется непростая(по крайней мере для меня) задача. Исходные данные:
есть файл 1.txt структура:
Код:
dec:
14312 100
1431245 102
1451 10
343133000 10
Необходимо преобразовать десятичные значения в шестнадцатиричные(8 байт) и записать в ветку реестра(путь HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services)
Структура значений в реестре http://shot.qip.ru/00CcJy-6jjb2Kw2s/
Первая строка это шестнадцатиричное представление первого значения из файла(14312) длиной 8 байт. Вторая строчка так же 8 байт это второе значение из файла(100)
Так же хочу заметить что шестнадцатиричное значение цифры 14312 будет 37E8, тогда как в реестре записано E837(видно на скриншоте).
Если вдруг понадобятся то вот значения из файла, для которых сделан скриншот
Код:
14312;1
14312;1
14512;1
34312;1
Свои наработки не буду публиковать да бы не сбивать с толку людей, создать рабочий вариант не получилось
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
zigzagrus79 [?]
Необходимо преобразовать десятичные значения в шестнадцатиричные(8 байт) и записать в ветку реестра
А зачем преобразовывать? Записывайте так, как есть с типом REG_DWORD.
 
Автор
Z

zigzagrus79

Новичок
Сообщения
31
Репутация
0
тогда это будет уже другая задача, не моя :D
из реестра эти данные именно в таком формате и виде читает один win драйвер
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 320
zigzagrus79,
Код:
#include <Array.au3>

Local $s_File = @ScriptDir & '\1.txt', $a_Ret, $b_Str = Binary(''), $t_Uint64 = DllStructCreate('uint64'), $t_Byte8 = DllStructCreate('byte[8]', DllStructGetPtr($t_Uint64))

$a_Ret = StringRegExp(FileRead($s_File), '(\d+)', 3)
If @error Then Exit 13
;~ _ArrayDisplay($a_Ret)
For $i = 0 To UBound($a_Ret) - 1
	DllStructSetData($t_Uint64, 1, $a_Ret[$i])
	$a_Ret[$i] = DllStructGetData($t_Byte8, 1)
	$b_Str &= $a_Ret[$i]
Next
$t_Uint64 = 0
$t_Byte8 = 0
ConsoleWrite($b_Str & @LF)
_ArrayDisplay($a_Ret)
 
Автор
Z

zigzagrus79

Новичок
Сообщения
31
Репутация
0
madmasles сказал(а):
zigzagrus79,
Код:
#include <Array.au3>

Local $s_File = @ScriptDir & '\1.txt', $a_Ret, $b_Str = Binary(''), $t_Uint64 = DllStructCreate('uint64'), $t_Byte8 = DllStructCreate('byte[8]', DllStructGetPtr($t_Uint64))

$a_Ret = StringRegExp(FileRead($s_File), '(\d+)', 3)
If @error Then Exit 13
;~ _ArrayDisplay($a_Ret)
For $i = 0 To UBound($a_Ret) - 1
	DllStructSetData($t_Uint64, 1, $a_Ret[$i])
	$a_Ret[$i] = DllStructGetData($t_Byte8, 1)
	$b_Str &= $a_Ret[$i]
Next
$t_Uint64 = 0
$t_Byte8 = 0
ConsoleWrite($b_Str & @LF)
_ArrayDisplay($a_Ret)
:beer: много и сильно спасибо, остальное дописал
 
Верх