将ASCII转换为十六进制,反之亦然-奇怪的问题 [英] Converting ASCII to Hex and vice versa - strange issue

查看:91
本文介绍了将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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆