数字十六进制数转字符数

/*

  帮助转换十六进制数据到格式字符串

*/

#define MAX_HEX_STR         4
#define MAX_HEX_STR_LENGTH  128
char hexStr[MAX_HEX_STR][MAX_HEX_STR_LENGTH];

uint8_t hexStrIdx = 0;

/**
  *****************************************************************************
  * @brief  helper to convert hex data into formated string
  *
    * @param[in]    data : pointer to buffer to be dumped.
    * @param[in]    dataLen : buffer length
  *
  * @return pointer to converted data
  *****************************************************************************
  */
char* hex2Str(unsigned char * data, size_t dataLen)
{
    unsigned char * pin = data;
    const char * hex = "0123456789ABCDEF";
    char * pout = hexStr[hexStrIdx];
    uint8_t i = 0;
    uint8_t idx = hexStrIdx;
    if(dataLen == 0)
    {
      pout[0] = 0;     
    } 
    else     
    {
      for(; i < dataLen - 1; ++i)
      {
          *pout++ = hex[(*pin>>4)&0xF];
          *pout++ = hex[(*pin++)&0xF];
      }
      *pout++ = hex[(*pin>>4)&0xF];
      *pout++ = hex[(*pin)&0xF];
      *pout = 0;
    }    
    
    hexStrIdx++;
    hexStrIdx %= MAX_HEX_STR;
    
    return hexStr[idx];
}

### 将十六进制字符换为十进制数字 #### Java 实现 在 Java 中,可以通过 `Integer.parseInt` 方法来完成这一任务。此方法允许指定基(radix),对于十六进制字符串,基应设置为 16。 以下是完整的代码示例: ```java public class HexToDecimal { public static void main(String[] args) { String hexString = "FF"; // 用户输入的十六进制字符串 try { int decimalValue = Integer.parseInt(hexString, 16); // 换为十进制 System.out.println("十六进制字符串 " + hexString + " 对应的十进制为:" + decimalValue); } catch (NumberFormatException e) { System.out.println("错误:输入的字符串不是一个有效的十六进制"); } } } ``` 上述代码通过捕获异常处理非法输入的情况[^1]。 --- #### Python 实现 Python 提供了非常简洁的方法来进行类似的换。可以使用内置函 `int()` 并指定第二个参为 16 来实现。 以下是具体的代码示例: ```python hex_string = "FF" # 用户输入的十六进制字符串 try: decimal_value = int(hex_string, 16) # 换为十进制 print(f"十六进制字符串 {hex_string} 对应的十进制为:{decimal_value}") except ValueError: print("错误:输入的字符串不是一个有效的十六进制") ``` 这段代码同样包含了对非法输入的异常捕捉逻辑[^4]。 --- #### C/C++ 实现 在 C 或 C++ 编程语言中,可以利用标准库中的 `strtol` 函来完成十六进制字符串到十进制整换。以下是一个简单的例子: ```c++ #include <iostream> #include <cstdlib> // 包含 strtol 函声明 using namespace std; int main() { const char* hexString = "FF"; // 十六进制字符串 long decimalValue; // 存储换后的十进制 // 使用 strtol 进行换,第三个参指定基底为 16 decimalValue = strtol(hexString, nullptr, 16); cout << "十六进制字符串 " << hexString << " 对应的十进制为:" << decimalValue << endl; return 0; } ``` 注意,在实际应用中可能还需要检查返回以及错误情况以确保程序健壮性[^5]。 --- ### 总结 不同编程语言提供了各自的工具集用于解决此类问题。无论是采用高级脚本语言如 Python 的简单语法还是低级系统语言像 C/C++ 更加灵活但稍显复杂的 API ,都可以高效达成目标——即将十六进制形式的据解析并映射至其等价的十进制表现形式。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值