因为十六进制通常用于表示像RGBA颜色模型数据这样的东西,所以我试图了解如何使用像0x11AA22BB这样的大十六进制字符串,并将其分割成不同的字节。(所以;0x11,0xAA,0x22和0xBB块,本质上.)。我知道每个十六进制数字可以直接用四位来表示。但我也不知道如何将一串比特分解成更小的组。
因此,我确信这可能有一个简单的答案。我确信这可能与将其转换为单个字节数组有关,或者使用位运算符或其他什么的,但我无法理解。我知道还存在一个关于endianness和字节是如何组织的问题(RGBA、ARBG、ABGR等),但是现在我只是想了解如何进行拆分,这样我就可以大致了解它是如何工作的。我正在使用C++,但我认为这不一定是特定于该语言的。
因此,重申一下;如何将一个像0x11AA22BB这样的大十六进制字符串拆分为0x11,0xAA,0x22,0xBB?
发布于 2012-12-18 16:01:53
这两种方式是mod/div和shift/掩码,但两者实际上是相同的。
国防部/发展部:
num = 0x11aa22bb
while num > 0:
byte = num % 0x100
print hex(byte)
num //= 0x100
换档/掩码:
num = 0x11aa22bb
while num > 0:
byte = num & 0xff
print hex(byte)
num >>=8
发布于 2013-08-23 04:01:55
如果您不介意离开C++,并且拥有一台Linux机器,您可以使用:
sed 's/0x/ /g‘file.hex _ sed’s/a F0-9{2}/0x& /g‘溶胶- tr -s’‘
第一个命令删除0x前缀并将其替换为空格,第二个命令将序列拆分为字节,并将前缀添加到每个部分。最后一个命令压缩空格。
请注意,您可以通过移除文件名(file.hex)在stdin上使用。
发布于 2015-02-23 09:43:52
void splitByte(unsigned char * split, unsigned int a,int quantBytes)
{
unsigned char aux;
int i;
for(i=0;i<quantBytes;i++)
{
split[i]=a&0x00FF;
a=(a>>8);
}
for(i=0;i<quantBytes-1;i++)
{
aux = split[i];
split[i] = split[quantBytes-i-1];
split[quantBytes-i-1] = aux;
}
}
主要内容:无符号字符split4;splitByte(split,0 0xffffffff,4);强文本
https://stackoverflow.com/questions/13943481
复制相似问题