Encoding 编码。。。什么?

Encoding 编码。。。什么?,encoding,hex,Encoding,Hex,如果以前有人问过我,请原谅,但我向你保证,我在互联网上搜索过,没有发现任何东西,可能是因为我没有正确的术语 我想取一个整数,并将其转换为一个小的endian(?)十六进制表示形式,如下所示: 303->0x2f010000 我可以看到字节被压缩,16位和1位都在同一个字节中,4096位和256位共享一个字节。如果有人能给我指出这种编码的正确术语,我相信我能找到我的答案。谢谢 将位移位运算符与按位AND和OR运算符结合使用 假设32位无符号: int value = 303; int result

如果以前有人问过我,请原谅,但我向你保证,我在互联网上搜索过,没有发现任何东西,可能是因为我没有正确的术语

我想取一个整数,并将其转换为一个小的endian(?)十六进制表示形式,如下所示:

303->0x2f010000


我可以看到字节被压缩,16位和1位都在同一个字节中,4096位和256位共享一个字节。如果有人能给我指出这种编码的正确术语,我相信我能找到我的答案。谢谢

将位移位运算符与按位AND和OR运算符结合使用

假设32位无符号:

int value = 303;
int result = 0x00000000;

for (int i = 0; i < 4; i++)
{
    result = result | ((value & (0xFF << (i * 8))) << (24 - (i * 8)));
}
int值=303;
int结果=0x00000000;
对于(int i=0;i<4;i++)
{

result=result |((value&(0xFFBig-endian和little-endian)表示内存中字节的顺序。像0x2f100000这样的值没有内在的endianness,endianness取决于CPU体系结构

如果您总是想反转32位值中字节的顺序,请使用Demi发布的代码

如果您总是希望获得特定的字节顺序(因为您准备通过网络传输这些字节,或将它们存储到磁盘文件),请使用其他方法。例如,BSD sockets库有一个函数htonl(),该函数接受CPU的本机32位值并将其转换为大端顺序


如果在小端计算机上运行,则htonl(303)=0x2f100000。如果在大端计算机上运行,则htonl(303)==303。在这两种情况下,结果都将由字节[0x00,0x00,0x01,0x2f]表示记忆中。

如果有人能给我想做的事情指定一个特定的术语,我还是很想听到。不过,我确实找到了一种方法来做我需要的事情,我会把它贴在这里,这样,如果有人来照顾我,他们就可以找到它。可能有(可能有)这是一种更简单、更直接的方法,但下面是我在VB.Net中为获取我想要的字节码所做的工作:

Private Function Encode(ByVal original As Integer) as Byte()    
    Dim twofiftysixes As Integer = CInt(Math.Floor(original / 256))
    Dim sixteens As Integer = CInt(Math.Floor((original - (256 * twofiftysixes)) / 16))
    Dim ones As Integer = original Mod 16
    Dim bytecode As Byte() = {CByte((16 * sixteens) + ones), CByte(twofiftysixes), 0, 0}
    Return bytecode
End Function

有效地将整数分解为十六进制分量,然后将相应的对转换为cBytes。

您是否在寻找类似dec2hex的函数?许多语言都有将十进制转换为十六进制表示的功能。+1可能是我见过的最礼貌的问题。:-)直接转换为十六进制不是问题——正如在本例中,我可以通过十六进制转换将303转换为12f。我需要的是使用一个字节来保存每对十六进制“位置”的编码,如果有意义的话。谢谢,黛米。我不认为这是我所需要的,但可能更多,因为我没有完全描述这个问题。@Blumer:你在vb中的代码片段基本上做了相同的事情,只是操作顺序略有不同,并且使用整数除法而不是位运算。你基本上是字节交换字节0和字节3,字节1和字节2