如何将BYTE数组转为U32?

clwk 2009-06-17 05:39:58
一个棘手的问题:

BYTE data[100];
unsigned int dataL[25];

我想把BYTE 数组每四个赋值给datal, 请问该怎么做比较方便?

多些!
...全文
2458 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Darkneece 2009-06-24
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 FreeMyself 的回复:]
引用 10 楼 mstlq 的回复:
引用 8 楼 FreeMyself 的回复:
要看系统使用的是Big endian还是Little endian,不能直接memcpy


关于这两个的区别,可以赐教一下吗^_^?


比如说数据0x1234,在两种模式下分别保存为:0x1234和0x3412
[/Quote]
应该是

数据0x1234,保存在地址0x0, 在两种模式下分别保存为:
BE: 0x0->0x12 0x1->0x34
LE: 0x0->0x34 0x1->0x12
mstlq 2009-06-23
  • 打赏
  • 举报
回复
多谢楼上点明^_^
FreeMyself 2009-06-19
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mstlq 的回复:]
引用 8 楼 FreeMyself 的回复:
要看系统使用的是Big endian还是Little endian,不能直接memcpy




关于这两个的区别,可以赐教一下吗^_^?
[/Quote]
比如说数据0x1234,在两种模式下分别保存为:0x1234和0x3412
FreeMyself 2009-06-19
  • 打赏
  • 举报
回复
比如说数据0x1234,在两种模式下分别保存为:0x1234和0x3412
clwk 2009-06-18
  • 打赏
  • 举报
回复
hehe
ameyume 2009-06-18
  • 打赏
  • 举报
回复
#include<stdio.h>
#include<stdlib.h>

typedef unsigned char BYTE;

void fun_1(int n)
{
if(n<2)
printf("%d", n);
if(n>=2)
{
fun_1(n/2);
printf("%d", n%2);
}
}


void main(){
BYTE data[100];
unsigned int dataL[25];

// Initialize
for (int i = 0; i < 100; i++) {
data[i] = 32 + i;
}

// Copy
for (int i = 0; i < 25; i++)
{
memcpy(&(dataL[i]), &(data[i * 4]), sizeof(int));
}

// Output
for (int i = 0; i < 25; i++) {
printf("Line%d.", (i + 1));
for (int j = 0; j < 4; j++) {
fun_1(data[i*4 + j]);
printf("\t");
}
printf("\nLine%d.", (i + 1));
fun_1(dataL[i]);
printf("\n");
}


system("pause");
}

直接使用memcpy在vs2005下二进制输出结果如下:
把data中地位的放在了int的最低位,即拷贝data[0]~data[3]后,在dataL[0]的从高位到低位依次存放data[3]~data[0]
Line1.100000 100001 100010 100011
Line1.100011001000100010000100100000
Line2.100100 100101 100110 100111
Line2.100111001001100010010100100100
Line3.101000 101001 101010 101011
Line3.101011001010100010100100101000
Line4.101100 101101 101110 101111
Line4.101111001011100010110100101100
Line5.110000 110001 110010 110011
Line5.110011001100100011000100110000
Line6.110100 110101 110110 110111
Line6.110111001101100011010100110100
Line7.111000 111001 111010 111011
Line7.111011001110100011100100111000
Line8.111100 111101 111110 111111
Line8.111111001111100011110100111100
Line9.1000000 1000001 1000010 1000011
Line9.1000011010000100100000101000000
Line10.1000100 1000101 1000110 1000111
Line10.1000111010001100100010101000100
Line11.1001000 1001001 1001010 1001011
Line11.1001011010010100100100101001000
Line12.1001100 1001101 1001110 1001111
Line12.1001111010011100100110101001100
Line13.1010000 1010001 1010010 1010011
Line13.1010011010100100101000101010000
Line14.1010100 1010101 1010110 1010111
Line14.1010111010101100101010101010100
Line15.1011000 1011001 1011010 1011011
Line15.1011011010110100101100101011000
Line16.1011100 1011101 1011110 1011111
Line16.1011111010111100101110101011100
Line17.1100000 1100001 1100010 1100011
Line17.1100011011000100110000101100000
Line18.1100100 1100101 1100110 1100111
Line18.1100111011001100110010101100100
Line19.1101000 1101001 1101010 1101011
Line19.1101011011010100110100101101000
Line20.1101100 1101101 1101110 1101111
Line20.1101111011011100110110101101100
Line21.1110000 1110001 1110010 1110011
Line21.1110011011100100111000101110000
Line22.1110100 1110101 1110110 1110111
Line22.1110111011101100111010101110100
Line23.1111000 1111001 1111010 1111011
Line23.1111011011110100111100101111000
Line24.1111100 1111101 1111110 1111111
Line24.1111111011111100111110101111100
Line25.10000000 10000001 10000010 10000011
Line25.-2088599168
mstlq 2009-06-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 FreeMyself 的回复:]
要看系统使用的是Big endian还是Little endian,不能直接memcpy

[/Quote]

关于这两个的区别,可以赐教一下吗^_^?
wanghao111 2009-06-18
  • 打赏
  • 举报
回复
FreeMyself 2009-06-18
  • 打赏
  • 举报
回复
要看系统使用的是Big endian还是Little endian,不能直接memcpy
mstlq 2009-06-18
  • 打赏
  • 举报
回复
使用memcpy函数

BYTE data[100];
unsigned int dataL[25];
for(int i=0;i<25;++i)
{
memcpy(&(dataL[i]),&(data[i*4]),sizeof(int));
}
yjukh 2009-06-18
  • 打赏
  • 举报
回复
注意大头小头问题
xgch1223 2009-06-18
  • 打赏
  • 举报
回复
memcpy(dataL,data,sizeof(data));
clwk 2009-06-17
  • 打赏
  • 举报
回复
memcpy对多个byte 数组该怎么使用?
biosli 2009-06-17
  • 打赏
  • 举报
回复
memcpy复制过去,另外,你那个不叫转~~

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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