050.Hex2String 十六进制转字符串
---------------
main.m
---------------
把十六进制的字符串按ASCII表解码成对应的字符串。
#import
<Foundation/Foundation.h>
NSString * hex2String(char hex[] , unsigned long len) { char tmp[len/2 + 1]; for (int i = 0 , j = 0; i < len; i+=2 , j++) { int shiBit = hex[i] >= 97 ? hex[i] - 87 : (hex[i] >= 65 ? hex[i] - 55 : hex[i] - 48); int geBit = hex[i + 1] >= 97 ? hex[i + 1] - 87 : (hex[i + 1] >= 65 ? hex[i + 1] - 55 : hex[i + 1] - 48); int intTmp = shiBit * 16 + geBit; tmp[j] = intTmp; } tmp[len/2] = " "; // 添加字符串结束字符 return [NSString stringWithCString:tmp encoding: NSASCIIStringEncoding]; } int main()
{ char hex[] = "616162636464"; NSLog(@"%@", hex2String(hex, strlen(hex))); char hex2[] = "6a6b6c6D6E6f70717273"; NSLog(@"%@", hex2String(hex2, strlen(hex2))); }
一、编写本节代码的具体步骤: 1.参照003节的代码编写步骤。
二、本节代码涉及到的知识点: 1.在上面的代码中,定义函数时,指定了函数的形参类型是数组, 但并没有指定数组的长度。而是通过第二个参数来动态决定该数组的长度。 这样就可以传入长度不等的数组了。 2.与传入普通变量不同的是,传入数组变量作为参数的实质就是传入一个指针。 这个指针指向数组的首元素的地址。
NSString * hex2String(char hex[] , unsigned long len) { char tmp[len/2 + 1]; for (int i = 0 , j = 0; i < len; i+=2 , j++) { int shiBit = hex[i] >= 97 ? hex[i] - 87 : (hex[i] >= 65 ? hex[i] - 55 : hex[i] - 48); int geBit = hex[i + 1] >= 97 ? hex[i + 1] - 87 : (hex[i + 1] >= 65 ? hex[i + 1] - 55 : hex[i + 1] - 48); int intTmp = shiBit * 16 + geBit; tmp[j] = intTmp; } tmp[len/2] = " "; // 添加字符串结束字符 return [NSString stringWithCString:tmp encoding: NSASCIIStringEncoding]; } int main()
{ char hex[] = "616162636464"; NSLog(@"%@", hex2String(hex, strlen(hex))); char hex2[] = "6a6b6c6D6E6f70717273"; NSLog(@"%@", hex2String(hex2, strlen(hex2))); }
一、编写本节代码的具体步骤: 1.参照003节的代码编写步骤。
二、本节代码涉及到的知识点: 1.在上面的代码中,定义函数时,指定了函数的形参类型是数组, 但并没有指定数组的长度。而是通过第二个参数来动态决定该数组的长度。 这样就可以传入长度不等的数组了。 2.与传入普通变量不同的是,传入数组变量作为参数的实质就是传入一个指针。 这个指针指向数组的首元素的地址。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。