我正在寻找Hex2yte和Byte2Hex转换。这些在Java语言中是可用的,在C#中也可以很容易地完成,但是我不知道如何在objective-c中做到这一点。
任何人有一个想法或以前做过这一点,请帮助我。
发布于 2011-01-17 20:43:44
我是这样想出来的
编辑:
/**
* Byte array to HexBinary string conversion
* @param pVal Byte buffer to be encoded
* @return HexBinary encoded value
*/
+ (NSString *) Byte2Hex:(NSArray *) pVal{
NSMutableString *str = [NSMutableString string];
for(int i=0; i < [pVal count]; i++){
int v1 = ([[pVal objectAtIndex:i] intValue] & 0xf0) >> 4;
int v2 = ([[pVal objectAtIndex:i] intValue] & 0x0f);
[str appendFormat:@"%c",[self HexCharFromDigit:v1]];
[str appendFormat:@"%c",[self HexCharFromDigit:v2]];
}
return str;
}
/**
* HexBinary to Byte array conversion
* @param pVal Byte buffer to be encoded
* @return HexBinary encoded value
*/
+ (NSArray *)Hex2Byte:(NSString *)pVal{
NSMutableArray *arr = [NSMutableArray array];
for (int i = 0; i < [pVal length]; i += 2){
int hinibble = [self HexDigitFromChar:[pVal characterAtIndex:i]];
int lonibble = [self HexDigitFromChar:[pVal characterAtIndex:(i+1)]];
Byte val = (Byte)((Byte)(hinibble << 4) | (Byte)lonibble);
[arr addObject:[NSNumber numberWithInt:val]];
}
return arr;
}/**
* Hex digit retrieval
* @param v Hexadecimal value
* @return Hexadecimal digit
*/
+ (char) HexCharFromDigit:(int) v{
switch (v)
{
case 0:
return '0';
case 1:
return '1';
case 2:
return '2';
case 3:
return '3';
case 4:
return '4';
case 5:
return '5';
case 6:
return '6';
case 7:
return '7';
case 8:
return '8';
case 9:
return '9';
case 10:
return 'A';
case 11:
return 'B';
case 12:
return 'C';
case 13:
return 'D';
case 14:
return 'E';
case 15:
return 'F';
}
return '.';
}
/**
* Hex digit retrieval
* @param v Hexadecimal value
* @return Hexadecimal digit
*/
+ (int) HexDigitFromChar:(char) v{
switch (v)
{
case '0':
return 0;
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
case 'A':
case 'a':
return 10;
case 'B':
case 'b':
return 11;
case 'C':
return 12;
case 'D':
case 'd':
return 13;
case 'E':
case 'e':
return 14;
case 'F':
case 'f':
return 15;
}
return '.';
}https://stackoverflow.com/questions/4713014
复制相似问题