¿Cómo convertirías cualquier estructura en matriz de bytes en procesadores con little-endian?Convertir estructura en bytes
Respuesta
Puede utilizar un char*
para acceder a cualquier tipo de objeto en C++, por lo que:
struct S
{
int a;
int b;
// etc.
};
S my_s;
char* my_s_bytes = reinterpret_cast<char*>(&my_s);
// or, if you prefer static_cast:
char* my_s_bytes = static_cast<char*>(static_cast<void*>(&my_s));
(Hay al menos some debate sobre la exactitud de la reinterpret_cast
frente a la static_cast
; en la práctica, realmente no importa - ambos deben dar el mismo resultado)
:-) demasiadas mejoras de lenguaje ahora en C++. Mientras que antes, esto sería suficiente: 'char * b = (char *) &my_s;' Tal vez si aprendo C++ de nuevo, primero leeré algo sobre esas construcciones fundidas. –
@Michael: Ese modelo C es el mismo que el 'reinterpret_cast' en este caso, porque ninguna combinación de' static_cast' y 'const_cast' es válida. Usar los moldes de estilo C++ te garantiza obtener el reparto que deseas; el elenco estilo C básicamente solo intenta una secuencia de cinco tipos diferentes de moldes hasta que encuentra uno que funciona. –
La respuesta es correcta dada la estructura que especificó. Sin embargo, arroja algunos shorts, large_integers o datos de personajes allí y es terriblemente incorrecto. –
I like to use a union.
typedef struct b {
unsigned int x;
unsigned int y;
} b_s;
typedef union a {
b_s my_struct;
char ary[sizeof(b_s)];
} a_u;
¿Por qué no simplemente 'ary [sizeof (b)]'? –
@Rob Lo suficientemente justo ... cambiado. – WhirlWind
¿Qué estás tratando de hacer? Si está tratando de serializar la estructura para que pueda guardarla en un archivo o pasarla en un mensaje, es mejor que use una herramienta diseñada para eso como boost::serialization.
Si lo que desea es una matriz de bytes que podría reinterpret_cast<char*>
como han mencionado otros, o hacer:
MyStruct s;
char [] buffer = new char[sizeof(s)];
memcpy(&buffer, &s, sizeof(s));
he contemplado en el void*
.
struct gizmo
{
//w/e
};
//stuff
gizmo *G = new gizmo;
void* bytearray = (void*)G;
Cómo su estructura se llena es ambiguo y depende de compilador, ABI, y la CPU. Tendrá que averiguarlo en sus manuales & y leer algunos ensamblajes.
No puede acceder a los bytes a través de un vacío * – nos
@nos: expanda, por favor. –
Como no puede desreferenciar un vacío *, no puede acceder a lo que apunte (tal vez bar utilizando memcpy, en cuyo caso un vacío intermedio * no es necesario) foo [0]; es un error del compilador si foo es un vacío *. Use un char * sin signo para acceder a bytes individuales. – nos
El problema con todas estas respuestas es que realmente no se puede hacer intercambio de bytes tonto sin saber algo acerca de los datos que está intercambiando. Los datos de caracteres no se se intercambian. Los enteros de 64 bits necesitan un tipo diferente de intercambio dependiendo de cómo exactamente los implementaron los dos procesadores en cuestión.
- 1. ¿Cómo convertir una estructura a una matriz de bytes en C#?
- 2. Convertir bytes ASCII [] a String
- 3. Java: Convertir bytes a entero
- 4. Convertir 4 bytes a int
- 5. Cómo convertir a NSString bytes
- 6. ¿Cómo puedo convertir POI HSSFWorkbook en bytes?
- 7. Convertir matriz de bytes en Bitset
- 8. Cómo convertir imágenes en matriz de bytes
- 9. Convertir bytes a bits en python
- 10. Lectura de bytes en una estructura en C#
- 11. Convertir una matriz de bytes a una clase que contiene una matriz de bytes en C#
- 12. Marshal.SizeOf en una estructura que contiene GUID da bytes adicionales
- 13. Cómo convertir cadenas a matrices de bytes?
- 14. Convertir matriz de bytes a archivo wav
- 15. ¿Convertir bytes de NSData a NSString?
- 16. Python: convertir cadena a matriz de bytes
- 17. ¿Cómo convertir bytes a un doble?
- 18. bytes Convertir [] para ArrayList <Object>
- 19. ¿Cómo convertir una matriz de bytes en doble en C?
- 20. Convertir bytes en números de coma flotante en Python
- 21. Convertir 3 bytes en un entero con signo en C#
- 22. cómo convertir imágenes en matriz de bytes en java?
- 23. Deserializar una matriz de bytes a una estructura
- 24. Java: convertir la lista de bytes en una matriz de bytes
- 25. Convertir matriz de bytes a la imagen en WPF
- 26. ¿Convertir int a una matriz de bytes en C?
- 27. Cómo convertir un entero a matriz de bytes en php
- 28. cómo convertir dos bytes en un número de 16 bits?
- 29. ¿Cómo convertir NSData a matriz de bytes en iPhone?
- 30. Convertir el árbol de sintaxis abstracto en código de bytes
ampliar su solicitud por favor - y tenga en cuenta que su respuesta será muy dependiente de la arquitectura del procesador – KevinDTimm
Cuál es la unidad de direccionamiento para endian pequeño? ¿Qué estás realmente tratando de hacer? – WhirlWind