la copie d'un short int à un tableau de caractères
-
22-10-2019 - |
Question
I ai une variable à court entier appelé s_int qui contient value = 2
unsighed short s_int = 2;
Je veux copier ce numéro à un tableau de caractères à la première et la deuxième position d'un tableau de caractères.
Le mot Let nous avons char buffer[10];
. Nous voulons que les deux octets de s_int
à copier à buffer[0]
et buffer[1]
.
Comment puis-je faire?
La solution
La façon habituelle de faire serait avec les opérateurs binaires à trancher et couper en dés, un octet à la fois:
b[0] = si & 0xff;
b[1] = (si >> 8) & 0xff;
bien que cela devrait vraiment être fait dans un unsigned char
, pas char
plaine comme ils sont signés sur la plupart des systèmes.
Le stockage des entiers supérieurs peut être effectué d'une manière similaire, ou d'une boucle.
Autres conseils
*((short*)buffer) = s_int;
viator emptor que l'ordre des octets résultant variera en fonction boutisme.
En utilisant des pointeurs et des moulages.
unsigned short s_int = 2;
unsigned char buffer[sizeof(unsigned short)];
// 1.
unsigned char * p_int = (unsigned char *)&s_int;
buffer[0] = p_int[0];
buffer[1] = p_int[1];
// 2.
memcpy(buffer, (unsigned char *)&s_int, sizeof(unsigned short));
// 3.
std::copy((unsigned char *)&s_int,
((unsigned char *)&s_int) + sizeof(unsigned short),
buffer);
// 4.
unsigned short * p_buffer = (unsigned short *)(buffer); // May have alignment issues
*p_buffer = s_int;
// 5.
union Not_To_Use
{
unsigned short s_int;
unsigned char buffer[2];
};
union Not_To_Use converter;
converter.s_int = s_int;
buffer[0] = converter.buffer[0];
buffer[1] = converter.buffer[1];
Je memcpy, quelque chose comme
memcpy(buffer, &s_int, 2);
Le boutisme est conservé correctement de sorte que si vous lancez tampon en bref * non signé, vous pouvez lire la même valeur de s_int la bonne façon. Autre solution doit être endian-courant ou vous pouvez échanger LSB et MSB. Et bien sûr sizeof (courte) doit être 2.
Si vous ne voulez pas faire ce genre de choses que vous pourriez bitwise effectuer les opérations suivantes
char* where = (char*)malloc(10);
short int a = 25232;
where[0] = *((char*)(&a) + 0);
where[1] = *((char*)(&a) + 1);