El comando printf Stranger, este es un tema muy grande que necesita experiencia - por favor, rellene la información que falta, amplíe las descripciones y corrija los detalles si puede Atención: Se trata de Bash-builtin printf comando - sin embargo, la descripción debe ser Casi idéntico para un comando externo que sigue a POSIX. GNU Awk espera una coma después de la cadena de formato y entre cada uno de los argumentos de un comando printf. Para ejemplos, vea: snippet de código. A diferencia de otras documentaciones, no quiero redirigirte a la página de manual de la familia de funciones de printf () C. Sin embargo, si you039re más experimentado, que debe ser la descripción más detallada de las cadenas de formato y modificadores. Debido a implementaciones históricas conflictivas del comando echo, POSIX recomienda que printf sea preferible a echo. General El comando printf proporciona un método para imprimir texto preformateado similar a la interfaz del sistema printf () (función C). It039s significado como sucesor de eco y tiene mucho más características y posibilidades. Además de otras razones, POSIX tiene un argumento muy bueno para recomendarlo: Ambos históricos principales sabores del comando echo son mutuos exclusivos, chocan. Había que inventar un nuevo comando para resolver el problema. Sintaxis El formato de texto se da en ltFORMATgt. Mientras que todos los argumentos a los que la cadena de formato puede apuntar se dan después de eso, aquí, indicados por ltARGUMENTSgt. Así, un típico printf - call se parece a: donde quotSome: snName: snquot es la especificación de formato, y las dos variables se pasan como argumentos, el s en el formatstring apunta a (para cada especificador de formato que da printf espera un argumento) . Opciones Si se da, la salida se asigna a la variable VAR en lugar de imprimirse a stdout (comparable a sprintf () de alguna manera). La opción - v no puede asignar directamente a índices de matriz en las versiones de Bash anteriores a Bash 4.1. En las versiones más recientes que 4.1, se debe tener cuidado al realizar expansiones en el primer argumento no de opción de printf, ya que esto abre la posibilidad de una vulnerabilidad de inyección de código fácil. Donde el eco puede por supuesto ser reemplazado con cualquier comando arbitrario. Si es necesario, especifique una cadena de formato codificado o utilice - para indicar el final de las opciones. El mismo problema se aplica a leer. Y una similar a mapfile. Aunque realizar expansiones en sus argumentos es menos común. Argumentos Por supuesto en shell-lo que significa que los argumentos son sólo cadenas, sin embargo, las C-notaciones comunes más algunas adiciones para las constantes de número se reconocen para dar un número de argumento para printf. quot tengo que procesar este carácter como un número binario a Establecer si durante el proceso de transmisión los datos se han corrompido. quot No estoy seguro de entender. Parece que en este caso usted no necesita mostrar que UCHAR como binario o hexadecimal, sino sólo para hacer algo de operación lógica bit a bit y cambios en ese UCHAR. Algo como contar el número de 1 bits de ese uchar por ejemplo: unsigned char c 93 int bitcount 0 printf (quotbitcount: dnquot, bitcount) Sábado, 09 de diciembre de 2006 9:11 PM Eso es exactamente lo que estaba buscando (un carry ). Pero con unos cuantos ajustes a la pieza de código que me diste logré hacerla sin signo charc 93 printf (ctxnn, c, c) if (c 128) Dj1 para (j0jlt8j) printf (d, Dj) Domingo, Diciembre 10, 2006 2:20 PM Todas las respuestas Para formato hexadecimal printf tiene el especificador de formato x que hace esto. Para binario se puede usar la función itoa: unsigned char ch 934 // algún valor de char sin signo aleatorio para mostrar char text16 // buffer para usar con itoa printf (quotxnquot. Ch) // hex usando el formato x especificador itoa (ch, text, 16 ) // hex usando itoa con base 16 printf (texto quotsnquot.) Itoa (ch, text, 2) // usando itoa con base 2 printf (quotsnquot, texto) Sábado, 09 de diciembre de 2006 19:49 Gracias por la Swift reply Este pedazo de código funciona en circunstancias normales pero en mi caso particular el UCHAR es parte de un mensaje entregado por un UART, al que se adjunta un flujo de datos. Por lo tanto, tengo que procesar este carácter como un número binario para establecer si durante el proceso de transmisión de los datos se ha corrompido. Necesito procesar este carácter como un número binario para establecer si durante el proceso de transmisión los datos se han corrompido. No estoy seguro de entender. Parece que en este caso usted no necesita mostrar que UCHAR como binario o hexadecimal, sino sólo para hacer algo de operación lógica bit a bit y cambios en ese UCHAR. Algo así como contar el número de 1 bits de ese uchar por ejemplo: unsigned char c 93 int bitcount 0 printf (quotbitcount: dnquot, bitcount) Sábado, 09 de diciembre de 2006 9:11 PM ¿Podría recuperar poco a poco al cambiar a la derecha (Gtgt) o hacia la izquierda (ltlt) Ie Cf / 66 - 01010101 / Donde ha pasado el último bit. Domingo, 10 de diciembre de 2006 10:02 No, no puedes. Es necesario probar el primer bit, cambiar, probar de nuevo y así sucesivamente. En lenguaje ensamblador el bit que sale se puede encontrar generalmente en algo llamado quotcarry flagquot y se puede probar allí pero C / C no tiene tal cosa. Sunday, December 10, 2006 1:18 PM Eso es exactamente lo que estaba buscando (llevar). Pero con unos cuantos ajustes a la pieza de código que me diste logré hacerla sin signo charc 93 printf (ctxnn, c, c) si (c 128) Dj1 para (j0jlt8j) printf (d, Dj) Domingo, Diciembre 10, 2006 2:20 PM Esto no parece correcto para mí. Miércoles, 07 de Noviembre de 2007 17:25 Microsoft está realizando una encuesta en línea para entender su opinión sobre el sitio Web de Msdn. Si decide participar, se le presentará la encuesta en línea cuando abandone el sitio Web de Msdn. ¿Desea participar? Function library - printf () Para especificadores de enteros (d, i, o, u, x, X) precisión menos especifica el número mínimo de dígitos a escribir. Si el valor a escribir es menor que este número, el resultado se rellena con ceros a la izquierda. El valor no se trunca incluso si el resultado es más largo. Una precisión de 0 significa que no se escribe ningún carácter para el valor 0. Para los especificadores e, E y f menos este es el número de dígitos a imprimir después del punto decimal. Para especificadores g y G menos Este es el número máximo de dígitos significativos que se deben imprimir. Para s menos este es el número máximo de caracteres a imprimir. De forma predeterminada, todos los caracteres se imprimen hasta que se encuentra el carácter nulo final. Para el tipo c menos no tiene efecto. Cuando no se especifica precisión, el valor predeterminado es 1. Si se especifica el período sin un valor explícito de precisión, se asume 0. La precisión no se especifica en la cadena de formato, sino como un argumento adicional de valor entero que precede al argumento que debe formatearse. El argumento se interpreta como un int corto o unsigned short int (sólo se aplica a los especificadores enteros: i, d, o, u, xy X). El argumento se interpreta como un int largo o unsigned long int para especificadores enteros (i, d, o, u, xy X), y como un carácter ancho o una cadena de caracteres anchos para los especificadores c y s. El argumento se interpreta como un doble largo (sólo se aplica a los especificadores de punto flotante: e, E, f, g y G). Argumentos adicionales menos Dependiendo de la cadena de formato, la función puede esperar una secuencia de argumentos adicionales, cada uno conteniendo un valor para ser insertado en lugar de cada etiqueta especificada en el parámetro de formato (si existe). Debe haber el mismo número de argumentos que el número de etiquetas que esperan un valor. Valor devuelto Si tiene éxito, se devuelve el número total de caracteres escritos. En caso de fallo, se devuelve un número negativo. Ejemplo En el ejemplo siguiente se muestra el uso de la función printf (). Vamos a compilar y ejecutar el programa anterior para producir el siguiente resultado menos
Comments
Post a Comment