Je suis donc en train de faire une conversion d'une chaîne en strtoul long non signé sur un petit boutiste et un gros boutiste. La petite machine d'Endian renvoie la valeur correcte, tandis que la grosse machine d'Endian ne le fait pas. Cette fonction est-elle vraiment incompatible avec les grosses machines endian? Si oui, y a-t-il un travail?est strtoul pas endian sécuritaire?
code:
printf ("%s\n",cLongs);
theLongs[i] = strtoul(cLongs, NULL, 10);
cout << "returned unsigned long value from string: " << theLongs[i] << endl;
Petit résultat endian:
1099188638048931
returned unsigned long value from string: 1099188638048931
résultat Big Endian:
1099188638048931
returned unsigned long value from string: 4294967295
post-scriptum Il semble que le même nombre est toujours retourné pour l'exemple Big endian.
Cela semble être la bonne réponse après avoir essayé un plus petit entier non signé. Y at-il moyen de contourner ce problème ou suis-je coincé entre un rocher et un endroit difficile? –
@Jeff: Je suis à peu près sûr qu'il n'y a pas de solution qui fonctionne sur plusieurs plates-formes, car ce serait au-delà de la norme C. Mais au lieu de l'exécution C, vous pouvez utiliser le flux de chaîne C++ et l'opérateur '<<' pour extraire une valeur entière plus grande. Je suis sûr que C++ devrait être préparé pour cela. Je verrai si je peux vous obtenir un petit exemple piraté ensemble. Donne aussi la réponse si C++ est préparé ou pas :) – 0xC0000022L
@Jeff: voyez si vos systèmes ont 'strtoull' (' strtouq' sur BSD), qui utilise 'unsigned long long' - probablement 64 bits sur les deux. –