如何将大端数字转换为本地数字delphi [英] how to convert big-endian numbers to native numbers delphi

查看:95
本文介绍了如何将大端数字转换为本地数字delphi的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道如何在Delphi中将大端数字转换为本地数字。我在移植一些C ++代码时碰到了这样的问题:

I want to know how to convert big-endian numbers to native numbers in Delphi. I am porting some C++ code in that I came across:

unsigned long blockLength  = *blockLengthPtr++ << 24;
blockLength |= *blockLengthPtr++ << 16;
blockLength |= *blockLengthPtr++ << 8;
blockLength |= *blockLengthPtr;

unsigned long dataLength  = *dataLengthPtr++ << 24;
dataLength |= *dataLengthPtr++ << 16;
dataLength |= *dataLengthPtr++ << 8;
dataLength |= *dataLengthPtr;

我对C ++不熟悉,所以我不理解这些运算符的作用。

I am not familiar with C++, so I don't understand what those operators do.

推荐答案

安德烈亚斯(Andreas)的回答是一个很好的例子,说明如何以纯Pascal进行操作,但是它仍然有点尴尬,就像C ++代码一样。实际上,这可以在单个汇编指令中完成,尽管取决于您使用的是32位还是16位整数:

Andreas's answer is a pretty good example of how to do it in pure pascal, but it still looks kinda awkward, just like the C++ code. This can actually be done in a single assembly instruction, though which one depends on whether you're using 32-bit or 16-bit integers:

function SwapEndian32(Value: integer): integer; register;
asm
  bswap eax
end;

function SwapEndian16(Value: smallint): smallint; register;
asm
  rol   ax, 8
end;

这篇关于如何将大端数字转换为本地数字delphi的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆