J'ai une chaîne qui contient la valeur hexagonale: J'ai besoin d'écrire ceci dans un fichier sous forme de 2 octets. Bien que j'essaie d'écrire un fichier, il va écrire comme la valeur 4 octets suivante: p> J'utilise l'opération suivante pour le fichier écrire: p> .0n..:j..}p...?*8...3..x
3 Réponses :
En réponse à votre question initiale sur l'écriture de 2 bytes en binaire à un fichier en C ++, vous avez un processus de base en 2 étapes. (1) Convertissez la représentation de votre chaîne du numéro à une valeur numérique à l'aide de Si Vous souhaitez formater la sortie dans HEX pour si essentiellement que vous avez votre chaîne et la convertissez-la en un nombre, par exemple p> maintenant la mettant complètement, vous pouvez faire quelque chose de court qui génère la valeur hexagonale écrite avec Exemple d'utilisation / Sortie FORT> P> stoi code> avec la base
16 code>. Ceci fournit une valeur numérique que vous pouvez stocker dans un
abrégé non signé code>. (2) Écrivez cette valeur dans votre fichier avec
f.write code>, pas
frwite code> où
f code> est votre référence de flux ouvert.
COUT CODE>, vous devez définir les indicateurs de
COUT CODE> pour sortir les valeurs numériques en format HEX (bien que cela ne fait pas directement partie de votre question, Il est lié dans le formatage d'E / S flux si vous le souhaitez.) p>
u code> contient une valeur numérique convertie du texte dans
STR code> en utilisant base-16 EM> que vous pouvez simplement écrire dans votre fichier en tant que valeur de 2 octets, par exemple p>
COUT code> ainsi que l'écrire dans le fichier
"out.bin" code>, par exemple p>
$ hexdump out.bin
0000000 e101
0000002
Voici un exemple pour une solution.
#include <fstream> #include <iostream> #include <string> int main() { std::ofstream file("file.txt", std::ios::binary); if(!file.is_open()) { return -1; } std::string str("e101"); for (std::size_t i = 0; i < str.length() - 1; ++++i) { file << static_cast<char>(str[i] * 16 + str[i + 1]); } file.close(); }
Je pense que votre question est ambiguë ... Gardez à l'esprit que, de votre chaîne, tous les deux, vous avez 1 octet (pas deux). Donc, vous voulez écrire deux chiffres (signification en ASCII) représentant la valeur hexagonale de la chaîne ... S'il s'agit de la bonne interprétation, vous devez diviser la chaîne par paires de caractères, puis convertir chacun entier équivalent. Voici mon code ... Il écrit à STDOUT, mais vous pouvez le modifier facilement pour écrire au fichier à l'écran.
#include <iostream> #include <stdio.h> #include <string> #include <cstring> #include <stdlib.h> using namespace std; int main () { string str = "e101"; string two_char; unsigned char byte; for (int i=0 ; i<str.size(); i+=2) { two_char = str.substr(i,2); byte = strtol(two_char.c_str(),0,16); cout << two_char << " " << (int)byte <<"\n"; } }
fwrite code> (A C Funciton), ne prend pas
std :: string code> comme premier argument, il faut
char * code>. (Vous devrez convertir
STR code> vers une valeur courte code> non signé avant appeler
fwrite code>), puis vous écrirez
Tailleof (court) < / Code> Nombre d'octets, pas
str.size () code> octets ... aussi pour
"65 31 30 31" code> Voir ascitable .
Vous voulez donc les deux octets
0xE1 code> et
0x01 code> pour être écrit dans votre fichier? S'il vous plaît Modifier votre question et faites cela clair. Votre titre de question est également trompeur, cela n'a rien à voir avec SHA.
Oui, je veux l'écrire comme seulement 2 octets de valeur
Dupliqué possible de Convertir un tableau de caractères en format binaire Hex C ++ a>
OK, vous avez étiqueté cette question C ++, mais ce que vous montrez est C. Les langues sont très différentes. Vous pouvez appeler c fonctions en C ++, mais si vous êtes censé écrire ceci en C ++, vous pouvez utiliser l'interface de flux de fichiers C ++ au lieu du code C
fwrite code> avec std :: ios_base :: openmode - binaire
Duplication de Stackoverflow.com/questions/21819782/ écrit-hex-to-a-file-c
@Revathaim S'il vous plaît laissez-nous savoir si vous écrivez en C ou en C ++.
J'écris à C ++ uniquement.
Comme si je donne une corde comme celle-ci std :: string wut = "b6306edf953a6ac8d17d70bda3e93f2a3816ac33f2a3816ac333d1ac78"; b> J'ai besoin de sortie comme .0n ..: j ..} P ...? .. .3..x b>
@Revathaim S'il vous plaît ne postez pas de tonnes de commentaires, mais Modifier Votre question et mettez toutes les informations pertinentes là je>. Regardez également les duplicats mentionnés dans les commentaires. Si vous écrivez en C ++,
fwrite (STR, 1, STR.SIZE (), FPTR) code> est le plus probable de toute façon, si cela fonctionne, si cela fonctionne, vous avez une plate-forme non standard.