C++ int tableau d'octets
J'ai cette méthode dans mon code java qui retourne le tableau d'octets de donnée de type int:
private static byte[] intToBytes(int paramInt)
{
byte[] arrayOfByte = new byte[4];
ByteBuffer localByteBuffer = ByteBuffer.allocate(4);
localByteBuffer.putInt(paramInt);
for (int i = 0; i < 4; i++)
arrayOfByte[(3 - i)] = localByteBuffer.array()[i];
return arrayOfByte;
}
Quelqu'un peut-il me donner des astuce comment puis-je convertir cette méthode C++?
Vous devez vous connecter pour publier un commentaire.
À l'aide de
std::vector<unsigned char>
:int i = 32; while ( i != 0 ) { arrayOfByte[i] = paramInt >> i; i -= 8; }
i
pour accéder àarrayOfByte
quand il y aura des valeurs de[32, 24, 16, 8]
? Je pense que vous devriez fairearrayOfByte[i/8]
.i/8
.Vous n'avez pas besoin d'une fonction pour cela; une distribution simple suffira:
N'importe quel objet en C++ peut être réinterprété comme un tableau d'octets. Si vous voulez effectivement faire une copie des octets dans un tableau séparé, vous pouvez utiliser
std::copy
:Aucune de ces méthodes ne prend ordre des octets en compte, mais comme vous pouvez réinterpréter le
int
comme un tableau d'octets, c'est facile à effectuer les modifications nécessaires vous-même.static_cast<>
s au lieu d'unreinterpret_cast<>
?reinterpret_cast
est garanti pour être l'équivalent de la paire destatic_cast
. Si je me souviens bien, il était d'accord en principe que les deux devraient toujours travailler, mais il a été très compliquée donc j'ai toujours éviter dereinterpret_cast
.Un autre moyen utile de le faire que j'utilise est les syndicats:
Cela fera en sorte que le tableau d'octets et le nombre entier de "chevauchement"( partagent la même mémoire ).
cela peut être fait avec toutes sortes de types, aussi longtemps que le tableau d'octets est de la même taille que le type( sinon l'un des champs ne sera pas influencé par les autres ). Et de les avoir comme un seul objet est également très pratique lorsque vous devez basculer entre les entier de manipulation de bits et de la manipulation et de la copie.
Vous pouvez obtenir octets individuels avec anding et le déplacement des opérations:
Int byte et vice versa.
Un int (ou tout autre type de données que ce soit), est déjà stocké des octets en mémoire. Alors pourquoi ne pas simplement copier la mémoire directement?
Un simple élégant une ligne qui fonctionne également avec n'importe quel autre type de données.
Si vous avez besoin d'octets inversée, vous pouvez utiliser std::reverse
ou, mieux encore, il suffit de copier les octets dans l'ordre inverse de commencer avec
Si vous ne voulez pas faire une copie des données à tous, et juste avoir sa représentation en octets
😀
Je sais que cette question a déjà les réponses mais je vous donne ma solution à ce problème. Je suis en utilisant la fonction de modèle et entier contrainte.
Voici ma solution: