Object-c 普通字符串、二进制、十进制、十六进制之间的相互转换

素颜马尾好姑娘i 2022-06-16 07:24 439阅读 0赞

废话不说了,直接看代码,这个是在IOS开发中(objc)普通字符串与二进制、十进制、十六进制之间的相互转换,下面的方法能满足大部分场景,不满足的,可以参考转换一下即可,希望对大家有点帮助。

  1. //
  2. // NSStringConvertUtil.h
  3. // TestSocket
  4. //
  5. // Created by gj on 2017/4/27.
  6. // Copyright © 2017年 juis. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. @interface NSStringConvertUtil : NSObject
  10. //计算字节长度
  11. +(NSInteger) computeStringLength:(NSString *) string;
  12. //普通字符串转换为二进制。
  13. +(NSString *)StingToBinary:(NSString *)string;
  14. //二进制转字符串
  15. + (NSString *)BinaryToNSString:(NSData *)data;
  16. //普通字符串转换为十六进制。
  17. + (NSString *)hexStringFromString:(NSString *)string;
  18. // 十六进制转换为普通字符串。
  19. + (NSString *)convertHexStrToString:(NSString *)hexString;
  20. // 十六进制转二进制
  21. + (NSString *)getBinaryByhex:(NSString *)hex;
  22. // 二进制转十六进制
  23. + (NSString *)BinaryToHex:(NSData *)data;
  24. //十进制转十六进制
  25. + (NSString *)ToHex:(uint16_t)tmpid;
  26. // 十进制转二进制
  27. + (NSString *)toBinarySystemWithDecimalSystem:(NSString *)decimal;
  28. // 二进制转十进制
  29. + (NSString *)toDecimalSystemWithBinarySystem:(NSString *)binary;
  30. @end
  31. //
  32. // NSStringConvertUtil.m
  33. // TestSocket
  34. //
  35. // Created by gj on 2017/4/27.
  36. // Copyright © 2017年 juis. All rights reserved.
  37. //
  38. #import "NSStringConvertUtil.h"
  39. @implementation NSStringConvertUtil
  40. //计算字节长度
  41. +(NSInteger) computeStringLength:(NSString *)string{
  42. NSInteger length = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
  43. // length -= (length - string.length) / 2;
  44. // length = (length +1) / 2;
  45. return length;
  46. }
  47. //普通字符串转换为二进制。
  48. +(NSString *)StingToBinary:(NSString *)string{
  49. NSData *myD = [string dataUsingEncoding:NSUTF8StringEncoding];
  50. Byte *bytes = (Byte *)[myD bytes];
  51. //下面是Byte 转换为16进制。
  52. NSString *hexStr=@"";
  53. for(int i=0;i<[myD length];i++)
  54. {
  55. NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff];///16进制数
  56. if([newHexStr length]==1)
  57. hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];
  58. else
  59. hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr];
  60. }
  61. return [self getBinaryByhex:hexStr];
  62. }
  63. //普通字符串转换为十六进制。
  64. + (NSString *)hexStringFromString:(NSString *)string{
  65. NSData *myD = [string dataUsingEncoding:NSUTF8StringEncoding];
  66. Byte *bytes = (Byte *)[myD bytes];
  67. //下面是Byte 转换为16进制。
  68. NSString *hexStr=@"";
  69. for(int i=0;i<[myD length];i++)
  70. {
  71. NSString *newHexStr = [NSString stringWithFormat:@"%x",bytes[i]&0xff];///16进制数
  72. if([newHexStr length]==1)
  73. hexStr = [NSString stringWithFormat:@"%@0%@",hexStr,newHexStr];
  74. else
  75. hexStr = [NSString stringWithFormat:@"%@%@",hexStr,newHexStr];
  76. }
  77. return hexStr;
  78. }
  79. // 十六进制转换为普通字符串。
  80. + (NSString *)convertHexStrToString:(NSString *)hexString{
  81. if (!hexString || [hexString length] == 0) {
  82. return nil;
  83. }
  84. NSLog(@"line : %d, func: %s ",__LINE__, __func__);
  85. char *myBuffer = (char *)malloc((int)[hexString length] / 2 + 1);
  86. bzero(myBuffer, [hexString length] / 2 + 1);
  87. for (int i = 0; i < [hexString length] - 1; i += 2) {
  88. unsigned int anInt;
  89. NSString * hexCharStr = [hexString substringWithRange:NSMakeRange(i, 2)];
  90. NSScanner * scanner = [[[NSScanner alloc] initWithString:hexCharStr] init];
  91. [scanner scanHexInt:&anInt];
  92. myBuffer[i / 2] = (char)anInt;
  93. }
  94. NSString *unicodeString = [NSString stringWithCString:myBuffer encoding:4];
  95. //NSLog(@"------字符串=======%@",unicodeString);
  96. return unicodeString;
  97. }
  98. // 十六进制转二进制
  99. +(NSString *)getBinaryByhex:(NSString *)hex
  100. {
  101. NSMutableDictionary *hexDic = [[NSMutableDictionary alloc] init];
  102. hexDic = [[NSMutableDictionary alloc] initWithCapacity:16];
  103. [hexDic setObject:@"0000" forKey:@"0"];
  104. [hexDic setObject:@"0001" forKey:@"1"];
  105. [hexDic setObject:@"0010" forKey:@"2"];
  106. [hexDic setObject:@"0011" forKey:@"3"];
  107. [hexDic setObject:@"0100" forKey:@"4"];
  108. [hexDic setObject:@"0101" forKey:@"5"];
  109. [hexDic setObject:@"0110" forKey:@"6"];
  110. [hexDic setObject:@"0111" forKey:@"7"];
  111. [hexDic setObject:@"1000" forKey:@"8"];
  112. [hexDic setObject:@"1001" forKey:@"9"];
  113. [hexDic setObject:@"1010" forKey:@"A"];
  114. [hexDic setObject:@"1011" forKey:@"B"];
  115. [hexDic setObject:@"1100" forKey:@"C"];
  116. [hexDic setObject:@"1101" forKey:@"D"];
  117. [hexDic setObject:@"1110" forKey:@"E"];
  118. [hexDic setObject:@"1111" forKey:@"F"];
  119. [hexDic setObject:@"1010" forKey:@"a"];
  120. [hexDic setObject:@"1011" forKey:@"b"];
  121. [hexDic setObject:@"1100" forKey:@"c"];
  122. [hexDic setObject:@"1101" forKey:@"d"];
  123. [hexDic setObject:@"1110" forKey:@"e"];
  124. [hexDic setObject:@"1111" forKey:@"f"];
  125. NSMutableString *binaryString=[[NSMutableString alloc] init];
  126. for (int i=0; i<[hex length]; i++) {
  127. NSRange rage;
  128. rage.length = 1;
  129. rage.location = i;
  130. NSString *key = [hex substringWithRange:rage];
  131. binaryString = [NSMutableString stringWithFormat:@"%@%@",binaryString,[NSString stringWithFormat:@"%@",[hexDic objectForKey:key]]];
  132. }
  133. return binaryString;
  134. }
  135. //十进制转十六进制
  136. + (NSString *)ToHex:(uint16_t)tmpid
  137. {
  138. NSString *nLetterValue;
  139. NSString *str =@"";
  140. uint16_t ttmpig;
  141. for (int i = 0; i<9; i++) {
  142. ttmpig=tmpid%16;
  143. tmpid=tmpid/16;
  144. switch (ttmpig)
  145. {
  146. case 10:
  147. nLetterValue =@"A";break;
  148. case 11:
  149. nLetterValue =@"B";break;
  150. case 12:
  151. nLetterValue =@"C";break;
  152. case 13:
  153. nLetterValue =@"D";break;
  154. case 14:
  155. nLetterValue =@"E";break;
  156. case 15:
  157. nLetterValue =@"F";break;
  158. default:
  159. nLetterValue = [NSString stringWithFormat:@"%u",ttmpig];
  160. }
  161. str = [nLetterValue stringByAppendingString:str];
  162. if (tmpid == 0) {
  163. break;
  164. }
  165. }
  166. return str;
  167. }
  168. // 十进制转二进制
  169. + (NSString *)toBinarySystemWithDecimalSystem:(NSString *)decimal
  170. {
  171. int num = [decimal intValue];
  172. int remainder = 0; //余数
  173. int divisor = 0; //除数
  174. NSString * prepare = @"";
  175. while (true)
  176. {
  177. remainder = num%2;
  178. divisor = num/2;
  179. num = divisor;
  180. prepare = [prepare stringByAppendingFormat:@"%d",remainder];
  181. if (divisor == 0)
  182. {
  183. break;
  184. }
  185. }
  186. NSString * result = @"";
  187. for (int i = prepare.length - 1; i >= 0; i --)
  188. {
  189. result = [result stringByAppendingFormat:@"%@",
  190. [prepare substringWithRange:NSMakeRange(i , 1)]];
  191. }
  192. return result;
  193. }
  194. // 二进制转十进制
  195. + (NSString *)toDecimalSystemWithBinarySystem:(NSString *)binary
  196. {
  197. int ll = 0 ;
  198. int temp = 0 ;
  199. for (int i = 0; i < binary.length; i ++)
  200. {
  201. temp = [[binary substringWithRange:NSMakeRange(i, 1)] intValue];
  202. temp = temp * powf(2, binary.length - i - 1);
  203. ll += temp;
  204. }
  205. NSString * result = [NSString stringWithFormat:@"%d",ll];
  206. return result;
  207. }
  208. //二进制转十六进制
  209. + (NSString *)BinaryToHex:(NSData *)data {
  210. if (!data) {
  211. return nil;
  212. }
  213. NSString * binary=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
  214. NSMutableDictionary *hexDic = [[NSMutableDictionary alloc] init];
  215. hexDic = [[NSMutableDictionary alloc] initWithCapacity:16];
  216. [hexDic setObject:@"0" forKey:@"0000"];
  217. [hexDic setObject:@"1" forKey:@"0001"];
  218. [hexDic setObject:@"2" forKey:@"0010"];
  219. [hexDic setObject:@"3" forKey:@"0011"];
  220. [hexDic setObject:@"4" forKey:@"0100"];
  221. [hexDic setObject:@"5" forKey:@"0101"];
  222. [hexDic setObject:@"6" forKey:@"0110"];
  223. [hexDic setObject:@"7" forKey:@"0111"];
  224. [hexDic setObject:@"8" forKey:@"1000"];
  225. [hexDic setObject:@"9" forKey:@"1001"];
  226. [hexDic setObject:@"A" forKey:@"1010"];
  227. [hexDic setObject:@"B" forKey:@"1011"];
  228. [hexDic setObject:@"C" forKey:@"1100"];
  229. [hexDic setObject:@"D" forKey:@"1101"];
  230. [hexDic setObject:@"E" forKey:@"1110"];
  231. [hexDic setObject:@"F" forKey:@"1111"];
  232. NSMutableString *hexString=[[NSMutableString alloc] init];
  233. for (int i=0; i<[binary length]; i+=4) {
  234. NSRange rage;
  235. rage.length = 4;
  236. rage.location = i;
  237. NSString *key = [binary substringWithRange:rage];
  238. hexString = [NSMutableString stringWithFormat:@"%@%@",hexString,[NSString stringWithFormat:@"%@",[hexDic objectForKey:key]]];
  239. }
  240. return hexString;
  241. }
  242. //二进制转字符串
  243. + (NSString *)BinaryToNSString:(NSData *)data {
  244. NSString * str=[self BinaryToHex:data];
  245. NSString *tmp=[self convertHexStrToString:str];
  246. return tmp;
  247. }
  248. @end

发表评论

表情:
评论列表 (有 0 条评论,439人围观)

还没有评论,来说两句吧...

相关阅读