Language agnostic 如何将十六进制字符串拆分为字节?

Language agnostic 如何将十六进制字符串拆分为字节?,language-agnostic,numbers,hex,byte,bit-manipulation,Language Agnostic,Numbers,Hex,Byte,Bit Manipulation,因为十六进制通常用于表示RGBA颜色模型数据之类的内容,所以我试图了解如何获取一个大的十六进制字符串,如0x11AA22BB,并将其拆分为单独的字节。(因此,0x11、0xAA、0x22和0xBB块基本上是..)。我知道每个十六进制数字可以直接用四位表示。但是,我也不知道如何将一个比特链分解成更小的组 所以,我相信可能有一个简单的答案。我确信这可能与将其强制转换为单个字节的数组,或者使用位运算符之类的东西有关,但我无法理解。我知道还有一个endianness和字节如何组织的问题(RGBA、ARB

因为十六进制通常用于表示RGBA颜色模型数据之类的内容,所以我试图了解如何获取一个大的十六进制字符串,如0x11AA22BB,并将其拆分为单独的字节。(因此,0x11、0xAA、0x22和0xBB块基本上是..)。我知道每个十六进制数字可以直接用四位表示。但是,我也不知道如何将一个比特链分解成更小的组

所以,我相信可能有一个简单的答案。我确信这可能与将其强制转换为单个字节的数组,或者使用位运算符之类的东西有关,但我无法理解。我知道还有一个endianness和字节如何组织的问题(RGBA、ARBG、ABGR等),但现在我只是想了解如何进行拆分,以便大致了解它的工作原理。我使用C++,但我认为这可能不一定是针对该语言的。
所以,重申,;如何将0x11AA22BB这样的大十六进制字符串拆分为0x11、0xAA、0x22、0xBB?

这两种方法是mod/div和shift/mask,但实际上都是相同的方法

国防部/分区:

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

这两种方式是mod/div和shift/mask,但实际上两者都是相同的方式

国防部/分区:

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

如果你不介意远离C++,拥有Linux机器,你可以使用:

sed's/0x//g'file.hex | sed's/[a-fA-F0-9]{2}/0x&/g'| tr-s'

第一个命令删除0x前缀并用空格替换,第二个命令将序列拆分为字节,并将前缀添加到每个部分。最后一个命令压缩空白


注意,可以通过删除文件名(文件.HEX)在STDIN上使用这个文件。

< P>如果你不介意离开C++,拥有Linux机器,你可以使用:

sed's/0x//g'file.hex | sed's/[a-fA-F0-9]{2}/0x&/g'| tr-s'

第一个命令删除0x前缀并用空格替换,第二个命令将序列拆分为字节,并将前缀添加到每个部分。最后一个命令压缩空白

请注意,您可以通过删除文件名(file.hex)在stdin上使用它。

void splitByte(unsigned char*split,unsigned int a,int quantBytes)
{
无符号字符aux;
int i;
对于(i=0;i>8);
}
对于(i=0;i
void splitByte)(无符号字符*split,无符号整数a,整数字节)
{
无符号字符aux;
int i;
对于(i=0;i>8);
}

对于(i=0;i“十六进制数”是什么意思?字符串?没有“十六进制数”这样的东西在计算机中。你有一个二进制值的文本表示。你解析字符串并进行计算。或者你的意思是你有一个
int
并想读取每个字节?谢谢你的信息,我已经将我的术语改为“string”。我确实意识到计算机中的所有数字都是二进制的表示。你说的“十六进制数”是什么意思字符串?没有“十六进制数”这样的东西在计算机中。你有一个二进制值的文本表示。你解析字符串并进行数学运算。或者你的意思是你有一个
int
并想读取每个字节?我已经将我的术语改为“string”,谢谢你提供的信息。我确实意识到计算机中的所有数字都是二进制的表示。啊,我明白了!谢谢你的直白奥沃德回答,伊格纳西奥。这真的非常类似于一个人如何将一个十进制数拆分成十、百、千等等。这对我来说非常有意义,谢谢你的帮助。啊,我明白了!谢谢你的直截了当的回答,伊格纳西奥。所以这真的非常类似于一个人如何将一个十进制数拆分成十,h不义之财,几千,等等。这对我来说很有意义,谢谢你的帮助。