#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) байты отображаются правильно Спасибо за помощь