需求
- 调用C++的
openssl/md5
的API,计算文件的md5,函数如下:
int MD5_Final(unsigned char *md, MD5_CTX *c);
- 最终得到的md5值是一个
128bits
的unsigned char
数组,即16个字符,md5值一般表示为16进制的32位字符串,即每个unsigned char
表示为2个字符的Hex
字符串
- 封装的这个接口输入为
PHAsset
或NSURL
,返回值为NSString
,因此最终需要将C++
的string
转为Objective-C
的NSString
思路和做法
- 一开始我想先把这个
unsigned char
转为unsigne int
,然后再 % 16
得出高4位、低4位对应的Hex
值,但是中间多经过一层int转换总感觉有点捞
- 用位运算更直接,分别取得
unsigned cha
r对应的高4位、低4位在0~15中的index
,再让结果加上该index对应的Hex字符
,就可以了,代码如下:
string unsignedCharToHexString(unsigned char ch){
const char hex_chars[] = "0123456789abcdef";
string result = "";
unsigned int highHalfByte = (ch >> 4) & 0x0f;
unsigned int lowHa