#include <iostream>
#include <iomanip>
int main()
{
int x;
std::cin >> std::hex >> x;
std::cout << x << std::endl;
return 0;
}
wie auch immer, um dies ohne Eingabe zu tun? weil ich die ursprüngliche Eingabe für etwas anderes verwenden möchte
– Zeulb
14. Juni 2012 um 10:38 Uhr
@zeulb, weiß nicht genau was du meinst. Aber du kehrst zurück cin dezimal by verwenden std::cin >> std::dec;
– hmjd
14. Juni 2012 um 10:42 Uhr
Ich meine, ich möchte sowohl Hex als auch Dezimal für zwei verschiedene Variablen verwenden
– Zeulb
14. Juni 2012 um 10:43 Uhr
Wie die Eingabe erfolgt ist (Hex oder Dezimal) hat keinen Einfluss auf die interne Darstellung der int-Variable(n), na und? Bitte drücken Sie sich klarer aus. Möchten Sie die Werte aus dem Stream in zwei Variablen innerhalb derselben Anweisung speichern??
– πάντα ῥεῖ
14. Juni 2012 um 10:48 Uhr
wie ich ‘cin >> hex >> k;’ verwende, dann gebe ich 265 ein, jetzt war der k-wert 613. was ich möchte, ist, 265 auf der variablen p zu speichern. und 613 bleiben auf Variable k. Entschuldigung für mein schlechtes Englisch.
– Zeulb
14. Juni 2012 um 10:51 Uhr
Nun, der C-Weg könnte so etwas sein wie …
#include <stdlib.h>
#include <stdio.h>
int main()
{
int n;
scanf("%d", &n);
printf("%X", n);
exit(0);
}
Hier ist eine Lösung, die Zeichenfolgen verwendet und sie mit ASCII-Tabellen in Dezimalzahlen umwandelt:
#include <iostream>
#include <string>
#include "math.h"
using namespace std;
unsigned long hex2dec(string hex)
{
unsigned long result = 0;
for (int i=0; i<hex.length(); i++) {
if (hex[i]>=48 && hex[i]<=57)
{
result += (hex[i]-48)*pow(16,hex.length()-i-1);
} else if (hex[i]>=65 && hex[i]<=70) {
result += (hex[i]-55)*pow(16,hex.length( )-i-1);
} else if (hex[i]>=97 && hex[i]<=102) {
result += (hex[i]-87)*pow(16,hex.length()-i-1);
}
}
return result;
}
int main(int argc, const char * argv[]) {
string hex_str;
cin >> hex_str;
cout << hex2dec(hex_str) << endl;
return 0;
}
Wenn Sie eine Eingabe hinzufügen, die ein boolescher oder Float- oder Int-Wert sein kann, wird sie im int-Hauptfunktionsaufruf zurückgegeben …
Mit Funktionsvorlagen, basierend auf Argumenttypen, generiert C separate Funktionen, um jeden Aufruftyp angemessen zu handhaben. Alle Definitionen von Funktionsvorlagen beginnen mit dem Schlüsselwort Vorlage, gefolgt von Argumenten in spitzen Klammern < und >. Für die Art der zu testenden Daten wird ein einziger formaler Parameter T verwendet.
Betrachten Sie das folgende Programm, in dem der Benutzer aufgefordert wird, eine Ganzzahl und dann eine Gleitkommazahl einzugeben, wobei jedes die Quadratfunktion verwendet, um das Quadrat zu bestimmen. Mit Funktionsvorlagen, basierend auf Argumenttypen, generiert C separate Funktionen, um jeden Aufruftyp angemessen zu handhaben. Alle Definitionen von Funktionsvorlagen beginnen mit dem Schlüsselwort Vorlage, gefolgt von Argumenten in spitzen Klammern < und >. Für die Art der zu testenden Daten wird ein einziger formaler Parameter T verwendet.
Betrachten Sie das folgende Programm, in dem der Benutzer aufgefordert wird, eine Ganzzahl und dann eine Gleitkommazahl einzugeben, wobei jedes die Quadratfunktion verwendet, um das Quadrat zu bestimmen.
#include <iostream>
using namespace std;
template <class T> // function template
T square(T); /* returns a value of type T and accepts type T (int or float or whatever) */
void main()
{
int x, y;
float w, z;
cout << "Enter a integer: ";
cin >> x;
y = square(x);
cout << "The square of that number is: " << y << endl;
cout << "Enter a float: ";
cin >> w;
z = square(w);
cout << "The square of that number is: " << z << endl;
}
template <class T> // function template
T square(T u) //accepts a parameter u of type T (int or float)
{
return u * u;
}
Here is the output:
Enter a integer: 5
The square of that number is: 25
Enter a float: 5.3
The square of that number is: 28.09
Dies sollte auch funktionieren.
#include <ctype.h>
#include <string.h>
template<typename T = unsigned int>
T Hex2Int(const char* const Hexstr, bool* Overflow)
{
if (!Hexstr)
return false;
if (Overflow)
*Overflow = false;
auto between = [](char val, char c1, char c2) { return val >= c1 && val <= c2; };
size_t len = strlen(Hexstr);
T result = 0;
for (size_t i = 0, offset = sizeof(T) << 3; i < len && (int)offset > 0; i++)
{
if (between(Hexstr[i], '0', '9'))
result = result << 4 ^ Hexstr[i] - '0';
else if (between(tolower(Hexstr[i]), 'a', 'f'))
result = result << 4 ^ tolower(Hexstr[i]) - ('a' - 10); // Remove the decimal part;
offset -= 4;
}
if (((len + ((len % 2) != 0)) << 2) > (sizeof(T) << 3) && Overflow)
*Overflow = true;
return result;
}
Der Parameter „Overflow“ ist optional, Sie können ihn also NULL lassen.
Beispiel:
auto result = Hex2Int("C0ffee", NULL);
auto result2 = Hex2Int<long>("DeadC0ffe", NULL);
10130000cookie-checkC++: Konvertieren von Hexadezimal in Dezimalyes
Das ist nicht klar.
0x265
ist 613 in Dezimalzahl. Was hast du erwartet?– Oliver Charlesworth
14. Juni 2012 um 10:26 Uhr
@Esailija Ich denke, es konvertiert stattdessen int in hex.
– Zeulb
14. Juni 2012 um 10:27 Uhr
Mögliches Duplikat: stackoverflow.com/q/676763/769220
– Chris
14. Juni 2012 um 10:41 Uhr
und hier: stackoverflow.com/q/819487/769220
– Chris
14. Juni 2012 um 10:42 Uhr
mögliches Duplikat von C++ Hex-String in vorzeichenbehaftete Ganzzahl konvertieren
– Quetzalcoatl
2. Juli 2013 um 22:17 Uhr