Cast int en tant que tableau d'octets en C++
Je suis en train de mettre en œuvre l'utilisation de la LSB méthode de recherche proposée par Andrew Grant dans une réponse à cette question: La Position du bit le moins significatif est définie
Cependant, résultant en une erreur de segmentation. Voici un petit programme illustrant le problème:
#include <iostream>
typedef unsigned char Byte;
int main()
{
int value = 300;
Byte* byteArray = (Byte*)value;
if (byteArray[0] > 0)
{
std::cout<< "This line is never reached. Trying to access the array index results in a seg-fault." << std::endl;
}
return 0;
}
Ce que je fais mal?
J'ai lu que ce n'est pas de bonne pratique de l'utilisation de "type C" jette en C++. Dois-je utiliser reinterpret_cast<Byte*>(value)
à la place? Cela résulte en une erreur de segmentation.
OriginalL'auteur peace_within_reach | 2011-03-09
Vous devez vous connecter pour publier un commentaire.
Utiliser ceci:
Vous ne voulez pas un pointeur vers l'adresse de 300, vous voulez un pointeur à l'endroit où 300 est stocké. Donc, vous utilisez l'adresse de l'opérateur
&
pour obtenir l'adresse devalue
.Résout son problème de pointeur, mais le plâtre est encore inutile avec le problème donné.
OriginalL'auteur Erik
Tandis que Erik répondu à votre question, par la suite, je voudrais dire avec insistance -- oui,
reinterpret_cast
devrait être utilisé plutôt que d'un style C cast.OriginalL'auteur ildjarn
La ligne doit être:
Byte* byteArray = (Byte*)&valeur;
Vous ne devriez pas avoir à mettre le (void *) en face de lui.
-Chert
OriginalL'auteur Chert Pellett
En gros, vous prenez un pointeur vers le début de la chaîne et de la refonte à un pointeur sur un octet.
OriginalL'auteur Blindy
@Erik déjà résolu votre problème principal, mais il y a une subtile que vous avez encore. Si vous cherchez seulement pour le moins significatif de peu, il n'y a pas besoin de s'embêter avec la fonte à tous.
Dans ce cas, sa mise en œuvre est tout à fait faux. Ce qu'il a maintenant seulement pour voir si le plus faible de l'octet est égal à 1.
Yep, mais comme il a des états, le code est une démo d'un problème spécifique. Ma réponse adresses problème spécifique. Si c'est son vrai code, alors il a besoin de quelques travaux 😛
Oui, Désolé pour la confusion. Le code que j'ai posté est juste une démonstration de l'accident. Le code est à l'aide d'un tableau d'octets dans une manière similaire, mais avec beaucoup d'autres choses en cours.
Pas de problème, mais dans les deux cas, il n'est pas nécessaire pour un casting pour un octet de trouver la moins importante de bit en nombre entier. En fait, faire le casting serait rendre les choses plus compliquées.
OriginalL'auteur Zac Howland