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 passtd :: string code> comme premier argument, il fautchar * code>. (Vous devrez convertirSTR code> vers une valeur courte code> non signé avant appelerfwrite code>), puis vous écrirezTailleof (court) < / Code> Nombre d'octets, passtr.size () code> octets ... aussi pour"65 31 30 31" code> Voir ascitable . Vous voulez donc les deux octets
0xE1 code> et0x01 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 - binaireDuplication 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.