为了账号安全,请及时绑定邮箱和手机立即绑定

iOS 取值范围问题 急

iOS 取值范围问题 急

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

2 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

超出64bit范围的数组已经无法用一个基础类型表达了,写一个uint8_t[]来存这个大数字,用Big-Endian的字节序。
#include
uint8_tnumbers[]={0x0f,0x1c,0,0,0,0,0,0,0,0,0,0};
charbytes[97];
uint8_tcurrent;
for(size_ti=0;icurrent=numbers[i];
for(size_tj=0;j<8;j++){
bytes[i*8+7-j]=(current&1)?'1':'0';
current>>=1;
}
}
bytes[96]='\0';
NSLog(@"numbers:%s",bytes);
                            
查看完整回答
反对 回复 2019-03-29
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

16进制和2进制可以直接用“一一对应”的方式来转换的,即一个16进制数字,对应4个2进制数字。
1对应0001,2对应0010,依次类推,f对应1111
所以随便一个16进制数abc,转换方式是把a换成1010,b换成1011,c换成1100,拼起来结果就是101010111100
所以按这个规则,不管多长的16进制数字都能简单转换。
                            
查看完整回答
反对 回复 2019-03-29
  • 2 回答
  • 0 关注
  • 467 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信