首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Byte2Hex和Hex2Byte转换

Byte2Hex和Hex2Byte转换
EN

Stack Overflow用户
提问于 2011-01-17 20:14:57
回答 1查看 1.1K关注 0票数 1

我正在寻找Hex2yte和Byte2Hex转换。这些在Java语言中是可用的,在C#中也可以很容易地完成,但是我不知道如何在objective-c中做到这一点。

任何人有一个想法或以前做过这一点,请帮助我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-17 20:43:44

我是这样想出来的

编辑:

代码语言:javascript
复制
/**
 * 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 '.';
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4713014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档