iOS 取值范围问题 急
PHPz
PHPz 2017-04-17 13:01:21
[iOS讨论组]

同志们,我遇到个坑~~
情况是这个样子的,我有个十六进制0x0f1c00000000000000000000
我要转换成二进制,然后这个有12个Byte长度,也就是说,我得输出来是96个数,例:100...11...11
但是我发现我不知道用哪个可以来输出了,求解决方案,long 和 int 不够用。。。。

PHPz
PHPz

学习是最好的投资!

全部回复(2)
高洛峰

超出 64 bit 范围的数组已经无法用一个基础类型表达了,写一个 uint8_t[] 来存这个大数字,用 Big-Endian 的字节序。

#include <stdint.h>

uint8_t numbers[] = {0x0f, 0x1c, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
char bytes[97];
uint8_t current;

for (size_t i = 0; i < sizeof(numbers); i++) {
    current = numbers[i];

    for (size_t j = 0; j < 8; j++) {
        bytes[i * 8 + 7 - j] = (current & 1)? '1': '0';
        current >>= 1;
    }
}

bytes[96] = '\0';
NSLog(@"numbers: %s", bytes);
巴扎黑

16进制和2进制可以直接用“一一对应”的方式来转换的,即一个16进制数字,对应4个2进制数字。

1对应0001,2对应 0010,依次类推,f对应 1111

所以随便一个16进制数 abc, 转换方式是把 a换成 1010, b换成1011,c换成1100,拼起来结果就是101010111100

所以按这个规则,不管多长的16进制数字都能简单转换。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号