c - C中的十六进制转换为字符串
问题描述
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main ( int argc, char *argv[] )
{
char *string = argv[1];
int i;
char* p = string;
for (i=0; i<strlen(string); i++)
{
int c;
for (;p[0] && p[1] && sscanf(p, "%2x", &c); p += 2) printf("%c", c);
}
printf("\n");
}
传递参数(十六进制)并生成字符串时,此代码可以正常工作。我需要和函数一样;当传递一个十六进制值时会给出一个字符串。
我尝试使用一个函数,但没有输出。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int fun (char * s)
{
char *string = s;
int i;
char* p = string;
for (i=0; i<strlen(string); i++)
{
int c;
for (;p[0] && p[1] && sscanf(p, "%2x", &c); p += 2) printf("%c", c);
}
printf("\n");
}
int main()
{
fun("Hello");
}
PS:请对我放轻松。我是新手。
解决方案
您可以使用atoi
并snprintf
解决它。
以下code
可以工作:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char *argv[])
{
if (argc != 2)
return -1;
char string[32];
snprintf(string, sizeof string, "0x%08X", atoi(argv[1]));
printf("%s\n",string);
return 0;
}
推荐阅读
- html - 水平滚动容器网页
- excel - 使用 MSXML2.XMLHTTP60 对象解析 HTML 数据时出现错误 91
- java - 如何在 android studio 中为天气应用程序制作自定义推送通知消息
- assembly - 为什么在主内存中以 4K 步进 16 会导致没有 L1d 缓存未命中
- node.js - ace 编辑器在 socket.io 节点应用程序中不起作用
- angular - 在角度如何在 URL 中传递两个变量?
- angular - Angular 6 使用“#”获取查询参数
- javascript - 如何单击与 Cypress.io 的另一个 DIV 关联的链接?
- javascript - 如何从动态添加的字段中获得差异 - 反应
- c++ - CRTP 基类继承 std::enable_shared_from_this,抛出 std::bad_weak_ptr。我需要交代