Articles of endianness

¿Por qué el orden de los campos de bits en los bytes de las estructuras no está definido por el propio lenguaje?

Encontré un problema hoy, donde descubrí que la forma en que se ordenan los campos de bits en mis bytes depende de la endianidad de mi procesador. Tomemos el siguiente ejemplo: struct S { uint8_t a : 3; uint8_t b : 5; }; Esta estructura toma un byte, pero el diseño del bit depende de […]

Cómo extraer campos individuales de la matriz de bytes (que está en BIG-ENDIAN) en C ++

Estoy intentando leer un par de bytes de byteData como se menciona a continuación en mi código C ++. El valor real dentro de byteData es una matriz de bytes de blobs binarios en formato de orden de bytes BIG-ENDIANO. Así que simplemente no puedo simplemente “convertir” la matriz de bytes en una cadena .. […]

¿Cómo intercambiar un entero de 64 bits al extraer bytes de bytearray en C ++?

Estoy intentando leer un par de bytes de byteData como se menciona a continuación en mi código C ++. El valor real dentro de byteData es una matriz de bytes de blobs binarios en formato de orden de bytes BIG-ENDIANO. Así que simplemente no puedo simplemente “convertir” la matriz de bytes en una cadena .. […]

Endianness para punto flotante.

Estoy escribiendo y leyendo datos binarios ( std::ios::binary ) en C ++ usando std::fstream – esto incluye valores enteros y de punto flotante. Si bien mi código funciona en mi propia architecture, no quiero asegurarme de que sea portátil y, por lo tanto, los archivos binarios escritos en mi máquina aún deben leerse correctamente en […]

Convertir orden de bytes de red (big endian) a little endian

He encontrado la siguiente función de MSDN que convierte un unsigned long del byte de la red al unsigned long en el orden de bytes del host, es decir, en little-endian definido como: u_long WSAAPI ntohl( _In_ u_long netlong ); El documento de MSDN dice que puede convertir un número de 32 bits. Pero ya […]

¿Este código comprueba la endianess?

Escuché en little endian, el LSB está en la dirección de inicio y en Big endian MSB está en la dirección de inicio. Así que escribí mi código así. Si no por que void checkEndianess() { int i = 1; char c = (char)i; if(c) cout<<"Little Endian"<<endl; else cout<<"Big Endian"<<endl; }

Big Endian y Little Endian soportan el ordenamiento de bytes.

Necesitamos soportar 3 plataformas de hardware: Windows (little Endian) y Linux Embedded (big y little Endian). Nuestro flujo de datos depende de la máquina que utiliza y los datos deben dividirse en campos de bits. Me gustaría escribir una sola macro (si es posible) para abstraer el detalle. En Linux puedo usar bswap_16 / bswap_32 […]

Detectando endianness programáticamente en un progtwig de C ++

¿Hay una manera programática de detectar si estás o no en una architecture big-endian o little-endian? Necesito poder escribir el código que se ejecutará en un sistema Intel o PPC y usar exactamente el mismo código (es decir, sin comstackción condicional).

Conversión de endianness y advertencias de g ++

Tengo el siguiente código de C ++: template struct EndiannessConv { inline static val fromLittleEndianToHost( val v ) { union { val outVal __attribute__ ((used)); uint8_t bytes[ sizeof( val ) ] __attribute__ ((used)); } ; outVal = v; std::reverse( &bytes[0], &bytes[ sizeof(val) ] ); return outVal; } inline static void convertArray( val v[], uint32_t size […]

¿Cómo obtener el valor doble usando libpq?

Los ejemplos en la documentación de libpq muestran cómo obtener el valor entero convirtiéndolo en la representación host-endian. Tengo curiosidad sobre qué se debe hacer para obtener el valor de doble precisión utilizando libpq (sin libpqtyppes)? He intentado reinterpret_cast sin suerte. Además, ¿por qué los datos de texto y bytes no necesitan conversiones endian? El […]