字符串转换为16进制

字符串转换为16进制问题 将一个字符串转换为 16 进制数 例如 12 转换为 0x12 转换为 0x 注意 转换前每一个字符占用一个字节 转换后两个数字占用一个字节 如 占用 8 个字节 转换后占用四个字节 0x12 0x34 0x56

大家好,我是讯享网,很高兴认识大家。

问题
将一个字符串转换为16进制数,例如“12”转换为0x12, ""转换为0x。
注意: 转换前每一个字符占用一个字节,转换后两个数字占用一个字节,如“"占用8个字节,转换后占用四个字节:0x12, 0x34, 0x56, x078.
实现


讯享网

#include <stdio.h> #include <ctype.h> int char2bcd(char str, unsigned char *value) { 
    if(!str || !value){ 
    return -1; } if(isdigit(str)){ 
    *value = str - '0'; }else if(islower(str)){ 
    *value = str - 'a' + 10; }else if(isupper(str)){ 
    *value = str- 'A' + 10; }else{ 
    return -1; } return 0; } int getValueFromStr(char *string, unsigned int length, unsigned char *value) { 
    int i, ret; unsigned char p,q; if(!string || length < 0 || length>8){ 
    return -1; } //*value = 0; if(length%2){ 
    ret = char2bcd(string[0], &p); if(ret<0){ 
    return -1; } value[0] = p; for( i =1 ;i< ((length+1)>>1); i++){ 
    ret = char2bcd(string[2*i - 1], &p); if(ret < 0){ 
    return -1; } ret = char2bcd(string[2*i], &q); if(ret < 0){ 
    return -1; } //*value = (*value << 8) + (p << 4) + q; value[i] = (p << 4) + q; } }else{ 
    for( i =0 ;i< (length>>1); i++){ 
    ret = char2bcd(string[2*i], &p); if(ret < 0){ 
    return -1; } ret = char2bcd(string[2*i + 1], &q); if(ret < 0){ 
    return -1; } //*value = (*value << 8) + (p << 4) + q; value[i] = (p << 4) + q; } } return 0; } 

讯享网
小讯
上一篇 2025-01-28 17:08
下一篇 2025-02-23 15:43

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/61112.html