iOS中16进制转10进制

/// 将十六进制的字符串转化为NSData
- (NSData )transStrHexToData:(NSString )strHex
{
/// bytes索引
NSUInteger j = 0;

NSInteger len = strHex.length;

if (len % 2 == 1) {
    /// 若不能被2整除则说明16进制的字符串不满足图片图。特此说明,假如只是单纯的把十六进制转换为NSData就把这个if干掉即可,
    return nil;
}

/// 动态分配内存
Byte *bytes = (Byte *)malloc((len / 2 + 1) * sizeof(Byte));

/// 初始化内存 其中memset的作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法
memset(bytes, '\0', (len / 2 + 1) * sizeof(Byte));

/// for循环里面其实就是把16进制的字符串转化为字节数组的过程
for (NSUInteger i = 0; i < strHex.length; i += 2) {

    /// 一字节byte是8位(比特)bit 一位就代表一个0或者1(即二进制) 每8位(bit)组成一个字节(Byte) 所以每一次取2为字符组合成一个字节 其实就是2个16进制的字符其实就是8位(bit)即一个字节byte
    NSString *str = [strHex substringWithRange:NSMakeRange(i, 2)];

    /// 将16进制字符串转化为十进制
    unsigned long uint_ch = strtoul([str UTF8String], 0, 16);

    bytes[j] = uint_ch;

    /// 自增
    j ++;
}
/// 将字节数组转化为NSData
NSData *data = [[NSData alloc] initWithBytes:bytes length:len / 2];

/// 释放内存
free(bytes);

return data;

}

在Swift语言,将16进制字符串换为ASCII码表示的字符串可以通过一系列步骤完成。以下是一个基本的换过程,它涉及到了将16进制字符串分割成每两个字符一组(因为一个ASCII字符由两个16进制数字表示),然后将每组16进制字符换为相应的数字,最后将这些数字换为ASCII字符。 这里是一个简单的Swift函数示例,它实现了上述功能: ```swift func hexToString(_ hex: String) -> String? { guard hex.count % 2 == 0 else { return nil } // 确保16进制字符串长度是偶数 let chars = Array(hex) var result = "" for i in stride(from: 0, to: chars.count, by: 2) { guard let first = CharacterSet.decimalDigits.value.index(of: chars[i]), let second = CharacterSet.decimalDigits.value.index(of: chars[i + 1]) else { return nil } let firstNumber = Int(String([chars[i]])) ?? 0 let secondNumber = Int(String([chars[i + 1]])) ?? 0 let decimalValue = firstNumber * 16 + secondNumber if decimalValue >= 32 && decimalValue <= 126 { // 确保字符在可打印ASCII范围内 result.append(UnicodeScalar(decimalValue)!) } else { return nil } } return result } // 使用示例 let hexString = "48656C6C6F" // 这是"Hello"的16进制表示 if let asciiString = hexToString(hexString) { print("换后的ASCII字符串: \(asciiString)") // 应该输出"Hello" } else { print("换失败") } ``` 这个函数首先检查输入的16进制字符串是否为偶数长度,然后通过循环每两个字符分割字符串,并将每两个字符换为一个ASCII字符,最后将这些字符连接成一个字符串。在换过程,它还确保了只换可打印的ASCII字符范围(32到126)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值