Как отформатировать десятичный тип данных в powershell как адрес ipv6 в Powershell? - PullRequest
0 голосов
/ 27 апреля 2018

Единственный тип данных в PowerShell, о котором я знаю, который может хранить 128-бит, - это [decimal], и хотя я, кажется, могу хранить переменную:

PS /home/leeand00/> [decimal]$ipv6addr=0x20010db81234

Кажется, я не могу вытащить его обратно (очевидно, это десятичное число):

PS /home/leeand00/>$ipv6addr                
35188897223220

И я подумал, что, возможно, это сработает, но это не так:

PS /home/leeand00/>"{0:x4}" -f ($ipv6addr)
Error formatting a string: Format specifier was invalid..                       
At line:1 char:1
+ "{0:x4}" -f $ipv6addr
+ ~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : InvalidOperation: ({0:x4}:String) [], RuntimeException
+ FullyQualifiedErrorId : FormatError

Вышеуказанная ошибка не имеет смысла, потому что ... типы данных являются десятичными

PS /home/leeand00/Documents/lifehacker organized/docs> $ipv6addr.GetType().Name 
Decimal

PS, я знаю, что в Powershell есть инструменты для работы с IPv6, но я просто пытаюсь выполнить некоторые простые двоичные операции, когда узнаю об этом.

1 Ответ

0 голосов
/ 27 апреля 2018

PowerShell просто использует базовые типы .NET и конвертеры. Спецификатор 'X' не поддерживает десятичный ввод:

Стандартные строки числового формата

Результат: шестнадцатеричная строка.

Поддерживается: только целыми типами.

Спецификатор точности: количество цифр в строке результата.

Если у вас есть десятичное число, один из вариантов сделать эту работу - сначала привести к int, int64 или uint64 (в зависимости от размера ввода):

"0x{0:x4}" -f [int64]ipv6addr
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...