3 votos

¿Cómo escribir el valor por defecto de un archivo como bytes?

¿Cómo guardar el contenido de un archivo en los valores por defecto de tal manera que se manejan como tipo -data?

De hecho, estoy buscando una alternativa de línea de comandos para este código obj-c:

NSData *data = // ... get the data
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:data forKey:@"mykey"];

Cuando llamo defaults read en esa tecla me sale:

% defaults read mydomain mykey
{length = 400, bytes = 0xdcf2dbbb cb4343d7 ec4324ae 1234de18 ... 289f4567 ec4324ae }

Más tarde, en una aplicación obj-c, los datos se leen utilizando:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSData *data = [userDefaults dataForKey:@"mykey"];

Incluso no tengo ni idea de cuál es el enfoque correcto para imitar la configuración de la clave, supongo que podría ser algo así:

% FILEDATA=... # read abc.xyz into a variable
% defaults write mydomain mykey -data "$FILEDATA" # save into user data

0 votos

¿El -data opción no hacer exactamente esto? Puede utilizar od para convertir binario a hexadecimal.

0 votos

No tengo ni idea de cómo hacerlo correctamente. Según el manual ( ss64.com/osx/defaults.html ), -data Allows the user to specify a bunch of raw data bytes as the value for the given preference key. The data must be provided in hexadecimal.

4voto

user3439894 Puntos 5883

Utilizando el defaults comando en Terminal , lo siguiente es un ejemplo sencillo de escribir un clave que contiene datos como su valor a un PLISTAS archivo :

% data='5468697320697320612064756D6D7920656E74727921'
% defaults write ~/Desktop/my.dummy.plist 'foobar' -data "$data"
% defaults read ~/Desktop/my.dummy.plist foobar           
{length = 22, bytes = 0x5468697320697320612064756d6d7920656e74727921}
% /usr/libexec/PlistBuddy -c 'print foobar' ~/Desktop/my.dummy.plist   
This is a dummy entry!
% 

Para convertir el contenido de un archivo a datos hexadecimales adecuado para su uso con el defaults comando Utiliza lo siguiente:

% data="$(xxd -p '/path/to/file' | tr -d '\n')"

O en lugar de "$data" en el ejemplo defaults comando Sustituirlo por:

"$(xxd -p '/path/to/file' | tr -d '\n')"

Ejemplo:

defaults write ~/Desktop/my.dummy.plist 'foobar' -data "$(xxd -p '/path/to/file' | tr -d '\n')"

Notas:

Este sintaxis también funciona:

data='<5468697320697320612064756D6D7920656E74727921>'
defaults write ~/Desktop/my.dummy.plist 'foobar' "$data"

Tenga en cuenta que < y > se utilizan como parte de data y el -data opción fue no utilizado para el tipo de valor del objetivo clave en el defaults comando .

El datos hexadecimales utilizado en el ejemplo se creó utilizando lo siguiente comando para convertir el cadena de texto a datos hexadecimales :

% xxd -p -u <<< 'This is a dummy entry!'
5468697320697320612064756D6D7920656E747279210A
% 

El uso de la -u opción con el xxd comando no es absolutamente necesario. Sólo me gusta ver datos hexadecimales en mayúsculas en el ejemplo .

Después de escribir el datos a un PLISTAS archivo en el primer ejemplo más arriba, utilizo PlistBuddy para leer el valor del objetivo clave . Tenga en cuenta que en este ejemplo sencillo el valor de foobar es sólo un cadena de texto y emite la información convertida datos hexadecimales como se muestra, sin embargo, si el valor de la datos en el objetivo clave es, por ejemplo, un binario PLISTAS archivo mismo u otros binarios datos El salida no va a ser bonito.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X