如何将一个长整型的高低字节调换?马上揭贴给分

ceble 2004-08-10 04:25:11
如何将一个长整型的高低字节调换?
例如
unsigned long int date=20021120(0X01317F80),
把date的高低字节调换后变成0X807F3101,即10进制的2155819265。
...全文
483 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
铖邑 2004-08-10
  • 打赏
  • 举报
回复
unsigned char *p = (unsigned char *)&date;
  • 打赏
  • 举报
回复
呜呜,又来晚了,分不到了
哎。郁闷。
ceble 2004-08-10
  • 打赏
  • 举报
回复
TO: zhangcg(白马)
你给出的两个函数极具收藏价值,可以解决包括本问题在内的许多问题,谢谢!

TO: yjy1001(蓝鲸--优秀得郁闷的鱼)
你给出的算法好象是按位翻转,不是按字节翻转,非常感谢你的关注

TO: jishiping(JSP 季世平)
无言的感激,永远的楷模


  • 打赏
  • 举报
回复
哈哈,大家都很强啊。我在给个汇编解法,也很简单,绝不浪费内存。-_-|||

//---------------------------------------------------------------------------
unsigned long int SwapByteOrder (unsigned long int Value)
{
asm
{
xor eax, eax
mov ebx, Value
mov ah, bl
mov al, bh
shl eax, 0x10
shr ebx, 0x10
mov ah, bl
mov al, bh
}
}

//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
unsigned long int date = 20021120;//(0X01317F80),
Caption = SwapByteOrder(date);
}
过客猫2022 2004-08-10
  • 打赏
  • 举报
回复
哎,这么简单
老季的答案够简单了
yjy1001 2004-08-10
  • 打赏
  • 举报
回复
unsigned long int date=20021120(0X01317F80);

unsigned long int hig, low;

hig = (data & 0xffff0000) >> 16;
low = (data & 0x0000ffff);

data = hig | (low << 16 );

ShowMessage(IntToStr(data));

看结果就知道 正确的了

jishiping 2004-08-10
  • 打赏
  • 举报
回复
#include <algorith.h>

void SwapLong(DWORD& Val)
{
BYTE* pb = (BYTE*)&Val;
swap(pb[0], pb[3]);
swap(pb[1], pb[2]);
}
constantine 2004-08-10
  • 打赏
  • 举报
回复
用移位就可以了,不用多少代码,不过我现在要区吃饭,搞不定晚上找我,我帮你写
zhangcg 2004-08-10
  • 打赏
  • 举报
回复
用以下两个函数实现任意转换:
一个整数转换成标准的存储信息FF FF FF FF
另一个函数把 FF FF FF FF转化成具体的数值
AnsiString tranFloatToStr(const float fnum)
{
char buf[10];
AnsiString szInfo;
memcpy(buf,&fnum,4);
int i = buf[3];
szInfo = RightStr(IntToHex(i,2),2).SubString(1,1) + RightStr(IntToHex(i,2),2).SubString(2,1);
i = buf[2];
szInfo = szInfo + RightStr(IntToHex(i,2),2).SubString(1,1) + RightStr(IntToHex(i,2),2).SubString(2,1);
i = buf[1];
szInfo = szInfo + RightStr(IntToHex(i,2),2).SubString(1,1) + RightStr(IntToHex(i,2),2).SubString(2,1);
i = buf[0];
szInfo = szInfo + RightStr(IntToHex(i,2),2).SubString(1,1) + RightStr(IntToHex(i,2),2).SubString(2,1);
return szInfo;

}

float tranStrToFloat(const AnsiString szInfo)
{
float fnum;
char cbuf[5];
AnsiString sz1;

sz1 = szInfo.SubString(7,1) + szInfo.SubString(8,1) + szInfo.SubString(5,1) + szInfo.SubString(6,1) +
szInfo.SubString(3,1) + szInfo.SubString(4,1) + szInfo.SubString(1,1) + szInfo.SubString(2,1);
cbuf[0] = StrToInt("0x" + sz1.SubString(1,2));
cbuf[1] = StrToInt("0x" + sz1.SubString(3,2));
cbuf[2] = StrToInt("0x" + sz1.SubString(5,2));
cbuf[3] = StrToInt("0x" + sz1.SubString(7,2));
cbuf[4] = '\0';
memcpy(&fnum,cbuf,4);
return fnum;
}

ceble 2004-08-10
  • 打赏
  • 举报
回复
to:xpdavis(咕嘟)
不能通过编译,
unsigned char *p = &date;
指针类型错误
wcccc1 2004-08-10
  • 打赏
  • 举报
回复
用位操作的移位应也行吧.
wcccc1 2004-08-10
  • 打赏
  • 举报
回复
好办法
铖邑 2004-08-10
  • 打赏
  • 举报
回复
unsigned long int date=20021120(0X01317F80);
unsigned char *p = &date;
unsigned char c = *p;
*p = p[1];
p[1] = c;
c = p[2];
p[2] = p[3];
p[3] = c;
铖邑 2004-08-10
  • 打赏
  • 举报
回复
不好意思,上面是双字节的调换,单字节调换类似
unsigned long int date=20021120(0X01317F80);
unsigned char *p = &date;
unsigned char c = *p;
*p = p[1];
p[1] = c;
c = p[2];
p[2] = p[3];
p[4] = c;
铖邑 2004-08-10
  • 打赏
  • 举报
回复
unsigned long int date=20021120(0X01317F80);
unsigned short *p = &date;
unsigned short s = *p;
*p = p[1];
p[1] = s;
开篇先讲两个小故事故事一:在北京一家创业公司工作的年轻女白领是一个旅行爱好者,喜欢旅行并分享到微博上。趁着五一假期到泰国旅游,她拍摄了一组照片分享到了微博上,24h后,微博阅读量达到1万,她收到了100元的广告费。年轻女白领收到广告费后非常的开心,因为她做着自己喜欢的事,还因此而获得了额外收益,从此决定创作出更多精美内容发送到微博上,与人分享自己的快乐。故事二:201X年,微博用户掀起“打拐”行动(打击拐卖儿童行动),一条“6岁女孩周XX四川彭州被拐”的微博在网上被疯狂转发,引来无数网友关心。不久之后,杭州一位女士,发现该条微博上使用的照片正是自己女儿的照片,而自己的女儿一直在家中,并未被拐。于是立马报警,网警查看了微博的操作记录(全部存在区块链上),快速追溯到了虚假微博的始作俑者,并将其绳之于法。上述故事情节,在去中心化微博平台中都是可以实现的,借助于区块链技术,可以保证微博上的所有数据和行为可溯源,从而保证传播信息的真实性。同时,由于去除掉了中心化主体,微博的参与者将同时成为微博平台的所有者,可以共享微博平台的收益。一、现有的中心化微博平台——新浪微博传统微博(如新浪微博)就是一个中心化的应用平台,新浪公司就是整个微博平台的中心。新浪公司制定新浪微博的运行规则,开发出整个微博平台,为其提供中央服务器,维持着整个新浪微博的运转,并不断地向外推广,吸引用户使用。一切商业行为都是为了追逐利益的,新浪公司运营新浪微博,也是为了吸引广告主投放广告,从而获得巨额的广告收入。在中心化的微博平台中,大致流程是这样的,博主(发微博者)会编辑微博发送到新浪微博平台中,新浪微博将微博推送给观众(看微博者),观众查看微博,微博中会夹杂着一些广告,观众看微博时也会看到一些广告。广告主会为广告的浏览量和点击量,支付广告费给新浪公司。二、去中心化微博平台与传统微博平台不同,在去中心化微博平台中,将没有中心机构,没有中央服务器,主要是通过区块链技术,运用分布式自治组织(DAO)的组织架构,实现微博平台的自治。让每一个微博参与者都成为微博平台的所有者,他们将共享微博平台获得的全部收益。在去中心化微博平台中,参与者主要有:发微博者,他们是微博内容提供者,是最核心的参与者之一。微博平台受不受欢迎,很大程度上依赖于内容的质量,而这就必然取决于发微博者。发微博者可以根据其微博中所包含广告的浏览量(等同于微博浏览量)和点击量,来获得微币(WB)作为奖励。挖矿者(存储节点),提供算力和存储能力,充当着服务器的角色,是微博平台得以正常运行的基础。微博系统每隔10分钟会将最新微博打包发送到各个存储节点中,存储节点会储存最新的微博数据,保证所有数据可溯源(区块链技术特点)。作为奖励,系统会给提供算力和存储能力的挖矿者以微币(WB)作为奖励。看微博者,他们是微博内容的浏览者,是微博平台中的主要用户,根据其对微博以及广告的浏览量和点击量,系统也会给予其微币(WB)作为奖励;广告主,在微博中投放广告,以提高自己品牌知名度或者直接引流的商家,他们可以在微博中投放广告,并根据广告的浏览量和点击量,用微币(WB)来支付广告费。在四个参与者中,发微博者、挖矿者和看微博者在参与过程中,都会获取到微币(WB)作为奖励,而广告主则主要需要消耗微币(WB)才能参与到微博活动中。因此,会形成一个微币(WB)交易市场。在交易市场中,广告主用现实中的通用货币(如RMB)购买其他参与者手中的微币(WB)。此外,博主(发微博者)通过微博下方所包含的广告是可以获得收益的,但广告也会给粉丝(看微博者)带来阅读成本,甚至造成反感,从而取消关注,所以博主会主动去把握好广告与粉丝之间的均衡。因此,在去中心化微博平台中,会将微博中广告数量和内容的选择权让渡给博主,从而降低粉丝阅读广告的心理成本,并提高广告的点击量。如一个摄影博主,发了一个在极地拍摄美景的微博,微博下方的广告则选择了与博主同款单反相机的广告,因为关注他微博的人都是以摄影爱好者为主,因此对这样的广告不会过度反感,甚至还会主动去了解。(注:笔者经常在某浪微博上刷到贷款、祛痘、整形等垃圾广告,表示十分反感,无法忍受!)去中心化微博平台参与者所构成的业务流程图详情如下: 

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧