Запись байтов в файл, смещение байтов - PullRequest
0 голосов
/ 10 апреля 2019

Мои байты хранятся в виде строковых значений, подобных этому, в файле D:\source.txt

208
203
131
132
148
128
128
128
128
128

Я просто хочу прочитать их и сохранить в другом файле

Я новичок вpowershell, поэтому написал программу, подобную этой

$bytes = New-Object System.Collections.ArrayList
  foreach($line in [System.IO.File]::ReadLines("D:\source.txt"))
    {
       [void]$bytes.Add([System.Convert]::ToByte($line));
    }

[System.IO.File]::WriteAllBytes("D:\target.zip",[Byte[]]$bytes.ToArray());

Так что из моего непонимания он должен получить строковое значение, преобразовать его в байтовый, сохранить его в ArrayList, преобразовать ArrayList в байтовый массив и записать в файл

* 1011.* И все идет хорошо, даже если я делаю echo [Byte[]]$bytes.ToArray() Я вижу правильное значение

Но файл результатов поврежден, и когда я проверяю его побайтно, я вижу следующие значения

-48
-53
-125
-124
-108
-128
-128
-128
-128
-128

Похоже, WriteAllBytes сдвигает мои байтовые значения на 128, но почему и где?

Я не очень профессионален в PowerShell и не могу найти что-либо связанное с документацией. Так что вы можете предложить, как я могу это исправить?

Спасибо за любую информацию

1 Ответ

0 голосов
/ 10 апреля 2019

Спасибо, я действительно нашел, в чем проблема.Причиной повреждения был неверный библиотечный метод для преобразования из байта Java (значения от -128 ... 127) в беззнаковый байт powershell. И в шестнадцатеричном редакторе я получил представление int (8), что соответствует при проверке в powershell (uint).) байты отображаются правильно Спасибо за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...