十进制数字转十六进制,固定长度

2020-09-27  本文已影响0人  smallLabel

区分大小端模式
以数字1举例,在小端模式下,转换成16进制为0x0100,可以看出01在前,那么在大端模式下就是0x0001。

小端模式

// Objective-C
+ (NSData *)convertToHexStringWithNum:(int)num length:(int)length {
    // 低位在前
    Byte *byteData = malloc(length * sizeof(Byte));
    for (int i = 0; i < length; i++) {
        byteData[i] = (Byte)((num & (0x000000FF << (i * 8))) >> (i * 8));
    }
    NSMutableData *data = [[NSMutableData alloc] initWithBytes:byteData length:length];
    free(byteData);
//    NSData *data = [NSData dataWithBytes:&num length:length];
    return  data;
}

大端模式

+ (NSData *)convertToBigHexStringWithNum:(int)num length:(int)length {
    Byte *byteData = malloc(length * sizeof(Byte));
    for (int i = 0; i < length; i++) {
        byteData[i] = (Byte)(num >> ((length - i - 1) * 8) & 0xFF);
    }
    NSMutableData *data = [[NSMutableData alloc] initWithBytes:byteData length:length];
    free(byteData);
    //    NSData *data = [NSData dataWithBytes:&num length:length];
    return  data;
}
上一篇下一篇

猜你喜欢

热点阅读