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?

Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top