2016-12-22 1 views
2

J'essaye d'écrire un entier non signé (sa représentation binaire DWORD de 4 octets) dans un fichier avec PowerShell, mais toutes les alternatives que j'ai essayées n'écrivent que du texte.Ecrivez un nombre entier en binaire dans un fichier avec PowerShell

Disons que j'ai ce nombre:

$number = [Int] 255

Le contenu du fichier doit être FF000000 (binaire), non 255 (texte). Je ne suis pas un expert PowerShell, donc j'apprécie toute aide.

+0

votre question est ambiguë. Entier signé/non signé. Comment écrivez-vous/lisez le fichier. [Voir ceci] (https://stackoverflow.com/questions) – LotPings

Répondre

4

trouvé une solution:

$number = [Int] 255 
# Convert the number to a byte[4] array 
$bytes = [System.BitConverter]::GetBytes($number) 
# Write the bytes to a file 
Add-Content -Path "D:\FILE.BIN" -Value $bytes -Encoding Byte 
+0

C'est propre, je ne connaissais pas l'encodage 'Byte' de' Add-Content'. Gardez à l'esprit que l'applet de commande s'ajoute aux fichiers, mais j'imagine que '-Encoding Byte' fonctionnera avec' Set-Content' et éventuellement 'Out-File'. – briantist

2

Pour cela, je pense que nous devons compter sur les classes .Net. Vous pouvez obtenir un tableau d'octets [byte[]] en utilisant [System.BitConverter]::GetBytes(). À partir de là, vous avez besoin d'un moyen d'écrire des octets dans le fichier sans les convertir en chaînes.

Pour cela, utilisez [System.IO.File]::WriteAllBytes().

Ainsi combiné, le code comme ceci le ferait:

$number = [int]255 
$bytes = [System.BitConverter]::GetBytes($number) 
[System.IO.File]::WriteAllBytes('C:\MyPath\To\File.bin', $bytes) 
+0

Je viens de poster une réponse en même temps, en faisant presque exactement la même chose. – karliwson

+0

@karliwson yup semble que nous étions à quelques secondes d'intervalle! – briantist