c - 将十进制数组转换为十六进制
问题描述
我正在尝试运行示例代码将十进制数数组转换为十六进制数并将它们存储在另一个数组中。如果我扫描数字,则代码有效,但在使用数组时出现分段错误。
#include <stdio.h>
int main(void)
{
int bin = 0;
// int num ;
int i = 0, rem;
char hex_arr[60];
//printf("Enter a decimal number: ");
//scanf("%d", &num);
int num [60] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 128, 31, 239, 31, 254, 1, 255, 240, 0, 0, 0, 0, 127, 255, 192, 255, 255, 255, 128, 127, 231, 192, 120, 14, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
for (int k = 0; k <= 59; i++)
{
rem = num[k] % 16; // get the right most digit
if (rem < 10)
{
hex_arr[i++] = 48 + rem;
}
else
{
hex_arr[i++] = 55 + rem;
}
num[k] /= 16; // get the quotient
}
printf("0x");
for(int j = i - 1; j >= 0 ; j--) // print the hex_arr in reverse order
{
printf("%c", hex_arr[j]);
}
return 0;
}
解决方案
这有帮助吗
笔记
- num 现在被定义为一个无符号字符数组 - 如果这是一个问题,您可以转换为 ByteToASCII
- 它一次性转换整个字符串,但很容易转换为一次处理一个字节
- 目前还不清楚您是否希望将 num 数组作为 nybbles 列表或作为整个字节,但同样,在此代码中很容易更改
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include <stdio.h>
void ByteToASCII (char * string, unsigned char byte )
{
char curval ;
curval = (char) ('0' | (byte >> 4)) ;
if ('9' < curval)
{
curval += (char) ('A' - '9' - 1) ;
}
*string++ = curval ;
byte <<= 4 ;
curval = (char) ('0' | (byte >> 4)) ;
if ('9' < curval)
{
curval += (char) ('A' - '9' - 1) ;
}
*string++ = curval ;
*string = 0 ; // keep null terminated
}
int main(void)
{
//printf("Enter a decimal number: ");
//scanf("%d", &num);
unsigned char num [60] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 127, 128, 31, 239, 31, 254, 1, 255, 240, 0, 0, 0, 0, 127, 255, 192, 255, 255, 255, 128, 127, 231, 192, 120, 14, 0, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
char hex_arr[(2 * sizeof(num)) + 1];
for (int k = 0; k < sizeof(num); k++)
{
ByteToASCII (&hex_arr[k * 2], num[k]) ;
}
printf(hex_arr);
return 0;
}
推荐阅读
- powershell - 通过 Powershell 通过 Azure Key Vault 管理的密钥访问 Azure 存储
- java - Java 在 HashMap 中存储连接
- angular - 如果没有 redux devtools 扩展,带有 NgRx 的 Angular 应用程序无法正常工作
- macos - 在一个文件夹中创建多个空的 .txt 文件
- c++ - 如何在 C++ 中调用命令行工具
- reactjs - 如何从打字稿中的反应钩子组件发出偶数?
- flutter - ffmpeg 似乎输出带有错误编解码器的视频?
- javascript - 在 if/else (Javascript) 中重新分配变量
- jenkins - 詹金斯:如何为参数化工作设置时间表?
- c# - 为什么我不能从“out BaseClass”转换为“out DerivedClass”?