Entonces, ¿sabes cómo la primitiva de tipo char tiene el tamaño de 1 byte? ¿Cómo podría hacer una primitiva con un tamaño personalizado? Así que, como en lugar de un int en el tamaño de 4 bytes, hago uno con el tamaño de digamos 16. ¿Hay alguna manera de hacer esto? ¿Hay alguna forma de evitarlo?¿Tamaño de bytes personalizado?
Respuesta
Normalmente, creará una estructura que represente los datos que le interesan. Si se trata de 16 bytes de datos, ya sea un conjunto de varios tipos más pequeños o está trabajando en un procesador que tiene un tipo integral nativo de 16 bytes.
Si intenta representar números extremadamente grandes, es posible que necesite encontrar una biblioteca especial que maneje números de tamaño arbitrario.
Depende de por qué lo hace. Por lo general, no puede usar tipos de menos de 8 bits, porque esa es la unidad direccionable para la arquitectura. Puede utilizar estructuras, sin embargo, para definir diferentes longitudes:
struct s {
unsigned int a : 4; // a is 4 bits
unsigned int b : 4; // b is 4 bits
unsigned int c : 16; // c is 16 bits
};
Sin embargo, no hay garantía de que la estructura será de 24 bits de longitud. Además, esto puede causar problemas endian. Donde pueda, lo mejor es usar tipos independientes del sistema, como uint16_t, etc. También puede usar operadores bit a bit y cambios de bit para mezclar las cosas muy específicamente.
uint16_t todavía tiene problemas de endian. –
@Billy cierto ... Creo que mi punto es que los bitfields en las estructuras son muy complicados en este sentido, y ese es uno de sus principales usos. – WhirlWind
Sí. No iba a rechazarte por eso. Pero pensé que valía la pena mencionarlo. –
Si quiere hacer un tipo nuevo, digitelo. Si desea que tenga un tamaño de 16 bytes, escribadef una estructura que contenga 16 bytes de datos de miembros. Solo ten en cuenta que con frecuencia los compiladores rellenarán contigo cosas para que coincidan con las necesidades de alineación de tu sistema. Una estructura de 1 byte raramente permanece 1 byte sin cuidado.
En C++ 11, hay una excelente solución para esto: std :: aligned_storage.
#include <memory>
#include <type_traits>
int main()
{
typedef typename std::aligned_storage<sizeof(int)>::type memory_type;
memory_type i;
reinterpret_cast<int&>(i) = 5;
std::cout << reinterpret_cast<int&>(i) << std::endl;
return 0;
}
Le permite declarar un bloque de almacenamiento no inicializado en la pila.
¿Cuál es el vínculo con la pregunta? –
@ J.N. Además del hecho obvio de que permitirte asignar almacenamiento de tamaño personalizado en la pila o en el montón te permite definir clases personalizadas de un lado dado usando los métodos correctos. Puede no comportarse como una primitiva, pero si necesita una clase de tamaño personalizado, esta es una gran herramienta para usar (incluso como un entero de ancho personalizado). Es mucho mejor que definir un estricto personalizado con miembros de datos arbitrarios. –
- 1. DockLeft tamaño personalizado
- 2. TCPDF Tamaño de página personalizado
- 3. Tamaño de bytes de un NSDictionary
- 4. svn tamaño de revisión en bytes
- 5. tamaño del conjunto de estructuras en bytes
- 6. MS Access: tamaño de papel personalizado
- 7. Tamaño de recorte personalizado en UIImagePickerController
- 8. Tamaño de página personalizado en Wicked_PDF
- 9. ¿Malloc personalizado para muchos bloques pequeños de tamaño fijo?
- 10. Lectura de bytes de tamaño "entero" de una matriz char *.
- 11. Fatal error: Permitido el tamaño de la memoria de bytes 134217728 agotados (intentó asignar 87 bytes)
- 12. Permitido el tamaño de la memoria de 268435456 bytes agotado
- 13. Tamaño de memoria permitida de 134217728 bytes agotado
- 14. Tamaño de las enumeraciones en bytes de compiladores diferentes
- 15. Error fatal: tamaño de memoria permitido de 67108864 bytes agotado
- 16. Cómo obtener el tamaño de imagen (bytes) usando PIL
- 17. Cálculo del tamaño de bytes del objeto Java
- 18. Http get request tamaño de paquete en bytes
- 19. Calc utf-8 tamaño de cadena en bytes?
- 20. C++ asegurando un tamaño flotante de 4 bytes
- 21. Rubí obtener el tamaño en bytes de una matriz
- 22. ¿Cómo saber el tamaño de la cadena en bytes?
- 23. Obtiene el tamaño de la cadena std :: string en bytes
- 24. Mide el tamaño de cadena en Bytes en php
- 25. Crear un control de calendario personalizado de tamaño completo
- 26. Wpf plantilla de control personalizado - tamaño de fuente relativo
- 27. Almacenamiento en Azure: archivos cargados con tamaño cero bytes
- 28. Cómo modificar el tamaño personalizado de las estrellas en RatingBar
- 29. ¿Cómo se determina el tamaño/marco de un UINavigationItem.titleView personalizado?
- 30. Cómo configurar el tamaño de página personalizado con Ghostscript
¿Qué quieres lograr con esto? ¿Es para permitir números más grandes en sus cálculos o tiene otro plan para sus enteros grandes de 16 bytes? – Laserallan
Esta es una pregunta interesante, pero poco especificada. Y las respuestas no abordan la creación de primitivas más grandes o más pequeñas. Más pequeño que un 'char': anular' operador & 'como en' std :: vector :: iterator'. Más grande que un 'long int': use una biblioteca bignum. –
Potatoswatter
@Laserallan Quiero usar esto para matemáticas con primitivas en C++ que los números salen del rango de las primitivas estándar en C++. –