用strlen()和指针十六进制转十进制C语言
时间: 2023-11-16 17:04:07 浏览: 71
可以用以下代码来实现:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "Hello, World!";
int len = strlen(str);
printf("Length of string is %d\n", len);
char *ptr = str;
printf("Address of string is %p\n", ptr);
int ptr_dec = (int)ptr;
printf("Address in decimal is %d\n", ptr_dec);
return 0;
}
```
这里首先用 `strlen()` 函数获取字符串的长度,然后用指针变量 `ptr` 指向字符串的首地址,使用 `%p` 格式符输出指针的十六进制表示,使用强制类型转换将指针转换为整型并输出其十进制表示。
相关问题
用strlen()函数和指针输入一个用字符串表示的十六进制数转换成十进制整数。C语言
以下是一个简单的代码示例:
```c
#include <stdio.h>
#include <string.h>
int hexToDec(char *hex) {
int len = strlen(hex);
int base = 1;
int dec = 0;
int i;
for (i = len - 1; i >= 0; i--) {
if (hex[i] >= '0' && hex[i] <= '9') {
dec += (hex[i] - 48) * base;
base *= 16;
} else if (hex[i] >= 'a' && hex[i] <= 'f') {
dec += (hex[i] - 87) * base;
base *= 16;
} else if (hex[i] >= 'A' && hex[i] <= 'F') {
dec += (hex[i] - 55) * base;
base *= 16;
}
}
return dec;
}
int main() {
char hex[100];
printf("请输入一个十六进制数:");
scanf("%s", hex);
printf("转换后的十进制数为:%d\n", hexToDec(hex));
return 0;
}
```
这个程序使用`strlen()`函数获取输入的十六进制数的长度,然后使用一个循环从后往前遍历每个字符,将其转换成十进制数并累加到`dec`变量中,最后返回`dec`。
用C语言的栈进制间的转换演示。实现包括二进制、八进制、十进制、十六进制的相互转换。并带有代码注释
好的,以下是用C语言实现进制间转换的示例代码,代码中有注释,希望对您有所帮助。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义栈结构
struct stack {
int top; // 栈顶指针
int capacity; // 栈容量
int* array; // 栈数组
};
// 创建一个栈
struct stack* create_stack(int capacity) {
struct stack* new_stack = (struct stack*)malloc(sizeof(struct stack));
new_stack->capacity = capacity;
new_stack->top = -1; // 初始时栈为空
new_stack->array = (int*)malloc(capacity * sizeof(int));
return new_stack;
}
// 判断栈是否为空
int is_empty(struct stack* s) {
return s->top == -1;
}
// 判断栈是否已满
int is_full(struct stack* s) {
return s->top == s->capacity - 1;
}
// 入栈操作
void push(struct stack* s, int item) {
if (is_full(s)) {
printf("Stack Overflow\n");
return;
}
s->array[++s->top] = item;
}
// 出栈操作
int pop(struct stack* s) {
if (is_empty(s)) {
printf("Stack Underflow\n");
return -1;
}
return s->array[s->top--];
}
// 获取栈顶元素
int peek(struct stack* s) {
if (is_empty(s)) {
printf("Stack Underflow\n");
return -1;
}
return s->array[s->top];
}
// 十进制转换为其他进制
void decimal_to_other(int num, int base) {
struct stack* s = create_stack(100); // 创建一个栈
while (num > 0) {
push(s, num % base); // 将余数入栈
num /= base;
}
printf("转换结果为:");
while (!is_empty(s)) {
printf("%d", pop(s)); // 依次弹出栈中元素
}
printf("\n");
}
// 二进制转换为十进制
int binary_to_decimal(char* binary) {
int decimal = 0;
int len = strlen(binary);
for (int i = 0; i < len; i++) {
decimal += (binary[i] - '0') * (1 << (len - i - 1)); // 按位展开累加
}
return decimal;
}
// 八进制转换为十进制
int octal_to_decimal(char* octal) {
int decimal = 0;
int len = strlen(octal);
for (int i = 0; i < len; i++) {
decimal += (octal[i] - '0') * (1 << (3 * (len - i - 1))); // 按位展开累加
}
return decimal;
}
// 十六进制转换为十进制
int hex_to_decimal(char* hexadecimal) {
int decimal = 0;
int len = strlen(hexadecimal);
for (int i = 0; i < len; i++) {
if (hexadecimal[i] >= '0' && hexadecimal[i] <= '9') {
decimal += (hexadecimal[i] - '0') * (1 << (4 * (len - i - 1))); // 按位展开累加
} else if (hexadecimal[i] >= 'A' && hexadecimal[i] <= 'F') {
decimal += (hexadecimal[i] - 'A' + 10) * (1 << (4 * (len - i - 1))); // 按位展开累加
}
}
return decimal;
}
// 其他进制转换为十进制
void other_to_decimal(char* num, int base) {
int decimal = 0;
int len = strlen(num);
for (int i = 0; i < len; i++) {
if (num[i] >= '0' && num[i] <= '9') {
decimal += (num[i] - '0') * (1 << (base * (len - i - 1))); // 按位展开累加
} else if (num[i] >= 'A' && num[i] <= 'F') {
decimal += (num[i] - 'A' + 10) * (1 << (base * (len - i - 1))); // 按位展开累加
}
}
printf("转换结果为:%d\n", decimal);
}
int main() {
char binary[100], octal[100], hexadecimal[100];
int decimal, base;
printf("请输入一个十进制数:");
scanf("%d", &decimal);
printf("请输入要转换的进制(2、8、16):");
scanf("%d", &base);
decimal_to_other(decimal, base);
printf("请输入一个二进制数:");
scanf("%s", binary);
printf("转换结果为:%d\n", binary_to_decimal(binary));
printf("请输入一个八进制数:");
scanf("%s", octal);
printf("转换结果为:%d\n", octal_to_decimal(octal));
printf("请输入一个十六进制数:");
scanf("%s", hexadecimal);
printf("转换结果为:%d\n", hex_to_decimal(hexadecimal));
printf("请输入一个其他进制数:");
scanf("%s", binary);
printf("请输入该数的进制(2、8、16):");
scanf("%d", &base);
other_to_decimal(binary, base);
return 0;
}
```
该代码利用了栈的数据结构来实现进制间的转换,可以实现二进制、八进制、十进制、十六进制之间的相互转换。您可以根据需要输入不同的数值和进制,进行转换。
阅读全文