c++
用函数实现将一个以字符串形式表示的十六进制数转换为一个十进制整数。例如,输入”A2”转换为162。 #include <iostream>#include <string>
#include <cmath>
int hexToDecimal(std::string hex) {
int decimal = 0;
int power = 0;
for (int i = hex.length() - 1; i >= 0; i--) {
int digitValue;
if (hex[ i] >= '0' && hex[ i] <= '9') {
digitValue = hex[ i] - '0';
} else if (hex[ i] >= 'A' && hex[ i] <= 'F') {
digitValue = hex[ i] - 'A' + 10;
} else if (hex[ i] >= 'a' && hex[ i] <= 'f') {
digitValue = hex[ i] - 'a' + 10;
} else {
throw std::invalid_argument("Invalid hexadecimal digit");
}
decimal += digitValue * pow(16, power);
power++;
}
return decimal;
}
int main() {
std::string hex = "A2";
int decimal = hexToDecimal(hex);
std::cout << "Hexadecimal " << hex << " is equivalent to decimal " << decimal << std::endl;
return 0;
}
这段代码定义了一个名为hexToDecimal的函数,它接受一个十六进制字符串作为输入,并返回一个对应的十进制整数。在函数内部,通过从字符串的末尾开始遍历每个十六进制位,并根据其对应的十进制值以16的幂的形式累加到结果中。最后,在main函数中调用hexToDecimal函数并输出结果。
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
int hexToDec(const string& hex) {
int dec = 0;
int power = 0;
for (int i = hex.size() - 1; i >= 0; i--) {
char digit = hex;
int value;
if (isdigit(digit)) {
value = digit - '0';
} else {
value = toupper(digit) - 'A' + 10;
}
dec += value * pow(16, power);
power++;
}
return dec;
}
int main() {
string hexString = "A2";
int decimal = hexToDec(hexString);
cout << "The decimal equivalent of " << hexString << " is " << decimal << endl;
return 0;
}
sh-5.2$ cat main.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/wait.h>
void exec_bc(const char *str) {
int pipe_fd;
if(pipe(pipe_fd) == -1) { // 创建管道
perror("pipe");
exit(EXIT_FAILURE);
}
pid_t pid = fork();
if(pid == -1) {
perror("fork");
exit(EXIT_FAILURE);
} else if(pid == 0) { // 子进程
if(dup2(pipe_fd, STDIN_FILENO) == -1) { // 将管道输入重定向到标准输入
perror("dup2");
exit(EXIT_FAILURE);
}
close(pipe_fd);
close(pipe_fd);
execlp("bc", "bc", NULL); // 调用bc程序
// 如果execlp函数执行失败,输出错误信息并直接退出程序。
perror("execlp failed");
exit(EXIT_FAILURE);
} else { // 父进程
write(pipe_fd, str, strlen(str)); // 将str写入管道
close(pipe_fd);
close(pipe_fd);
// 不需要获取子进程的退出状态,直接使用NULL即可。
waitpid(pid, NULL, 0);
}
}
int main() {
char buff;
fgets(buff, 1024, stdin);
exec_bc(buff);
return 0;
}
sh-5.2$ g++ -g3 -Wall -o main main.c
sh-5.2$ ./main
ibase=16; A2
162
sh-5.2$
页:
[1]