es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Representación binaria de una matriz de caracteres

Tengo unión, que consta de 8 campos de uint8, 2 campos de int32 o un int64.

Estoy intentando guardar un array de 8 valores allí: 0, 0, 0, 1, 0, 0, 0, 1

Hay un error en el software que estoy tratando de resolver, desafortunadamente no entiendo la representación binaria de este array.

Mi unión:

union {
uint8_t u08[8];
uint32_t u32[2];
uint64_t u64;
} data;

La salida de mi depurador:

Nombre: u08
Detalles: “\0\0\0\001\0\0\0\001”
Por defecto: 0x4001e6a0 <ucheap+66948>
Decimal: 1073866400
Hexadecimal: 0x4001e6a0
Binario: 1000000000000011110011010100000
Octal: 010000363240

Nombre: u32
Detalles: {1, 1}
Por defecto: 0x4001e6a0 <ucheap+66948>
Decimal: 1073866400
Hexadecimal: 0x4001e6a0
Binario: 1000000000000011110011010100000
Octal: 010000363240

Nombre: u64
Detalles: 4294967297
Por defecto: 4294967297
Decimal: 4294967297
Hexadecimal: 0x100000001
Binario: 100000000000000000000000000000001
Octal: 040000000001

Mis preguntas son:
1. ¿Por qué un u64 tiene un valor diferente a los demás? Según mi entendimiento, en C se reserva espacio solo para una variable de una unión para almacenar el valor.
2. ¿Qué significa esta representación binaria del arreglo de uint8? Incluso si fuera ASCII (que no lo es, ya que estoy enviando valores directos, no caracteres), entonces ‘0’ sería 110000 y ‘1’ sería 110001

Estoy utilizando el MPC5748G de NXP con S32DS (un IDE basado en Eclipse) para la depuración.</ucheap+66948></ucheap+66948>

Tags:  ,

Answer

  1. Avatar for davy.ai
    1. El tamaño de la unión está determinado por el miembro más grande, que en este caso es u64 (8 bytes). Por lo tanto, la unión asigna 8 bytes de memoria para almacenar los datos. Los otros miembros (u08 y u32) comparten el mismo espacio de memoria, pero interpretan los datos de diferentes formas. El valor de la unión depende de qué miembro fue el último en escribir en ella. En este caso, parece que u64 fue el último miembro en escribir, por lo que se muestra su valor.
    2. La representación binaria del array uint8 es “00000001 00000001”, lo cual es equivalente a 257 en decimal. Los dígitos binarios “0” y “1” a los que te refieres (110000 y 110001 respectivamente) son los códigos ASCII para esos caracteres, pero no aplican a este caso ya que estamos tratando con enteros, no con caracteres.

Comments are closed.