将ASCII转换为十六进制,反之亦然-奇怪的问题 [英] Converting ASCII to Hex and vice versa - strange issue
本文介绍了将ASCII转换为十六进制,反之亦然-奇怪的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
正在编写两个函数-一个将ascii转换为十六进制,然后反之亦然.遇到了非常非常奇怪的事情...用printf();语句在Asc2Hex函数中被注释掉,它不起作用.如果我取消注释,它会起作用...有任何想法吗?如果有人知道进行此转换的更好方法,请告诉我.
Working on writing two functions - one to convert ascii to hexadecimal and then vice-versa. Encountered something very very odd... With the printf(); statement commented out in the Asc2Hex function, it doesn't work. If I uncomment it, it works... Any idea? And if anyone knows of a better way to do this conversion, please do let me know.
#include <stdio.h>
#include <string.h>
char *Asc2Hex(char *);
int main()
{
char *test = Asc2Hex("ABCDEFG");
printf("Test: %s\n",test);
}
char *Asc2Hex(char *data){
int i, len = strlen(data);
char buffer[len+1];
char *pbuffer = buffer;
//printf("String: %s\n",data);
for(i = 0; i < (len * sizeof(char)); i++){
sprintf(pbuffer+i*2, "%x",*(data+i));
}
return pbuffer;
}
推荐答案
解决分配问题,您的代码可能变成这样:
Fixing the allocation problem, your code could become something like this :
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *Asc2Hex(char *data) {
int i, len = strlen(data);
char *buffer = malloc(2*len+1);
if (buffer) {
for(i = 0; i < len; i++){
sprintf(&buffer[i*2],"%.2x",data[i]&0xff);
}
}
return buffer;
}
int main() {
char *test = Asc2Hex("\xff");
printf("Test: %s\n",test);
if (test) free(test);
}
这篇关于将ASCII转换为十六进制,反之亦然-奇怪的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文