Запись байтов в файл, смещение байтов

#powershell

#powershell

Вопрос:

Мои байты хранятся в виде строковых значений, подобных этому, в файле 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 в массив байтов и записать его в файл

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

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

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

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

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

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

Комментарии:

1. Я не могу воспроизвести. Я подозреваю, что проблема заключается в том, какой метод вы используете для проверки вашего файла «байт за байтом». Если вы используете Get-Content "D:target.zip" -Encoding Byte , что вы видите?

2. Демонстрация

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

4. Ваше объяснение того, что в конечном итоге произошло, неясно, но похоже, что проблема не была связана с вопросом, представленным здесь, код, в котором не объясняется ваш симптом. Пожалуйста, рассмотрите возможность удаления вашего вопроса, поскольку он вряд ли будет полезен будущим читателям.

Ответ №1:

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