易猫猫 发表于 2014-2-27 02:37:16

不知如何问的问题 0x 00 58



上面是格式说明


下面是实际收到的数据
上面的格式来分析

02 03 04 05 是固定的
00 0c2字节 应该是 12 但为什么是 00 0c12不是 0c 00吗
同样的问题 设备ID00 58对应的 88 我咋试感觉应该是58 00 才对呢?

易猫猫 发表于 2014-2-27 02:39:06

00 0c 转短整型 也不是 12 啊而是3072
0c 00 转短整型 才是 12   

00 58 转短整型    22528
58 00 转短整型    88

是我分析错了,还是 他说明有问题?

易猫猫 发表于 2014-2-27 02:46:10

完整协议

附加一段数据02 03 04 05 00 0C 00 58 42 00 00 B4

02 03 04 05 固定的头   这个没问题

00 0c 是长度       应该是12   这个不知道怎么转的12
00 58 是ID          应该是 88   这个不知道怎么转的88
42是指令代码   B这个没问题
00一个递增值
00没有和和协议对上
b4校验和

machimilk 发表于 2014-2-27 03:19:10

存储的时候高地位会变

给你贴一段转来的就明白了



大小端模式
为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为 8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于 大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。小端模式,刚好相反。我们常用的X86结构是小端模式,而KEIL C51则为大端模式。很多的ARM,DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

易猫猫 发表于 2014-2-27 03:36:50

那我要如何解决啊? 还是说他就是返过来存放的?

易猫猫 发表于 2014-2-27 03:41:05

短整型 按他的方法是不是只要把 前后颠倒一下就可以了,楼上的大家说的太专业

machimilk 发表于 2014-2-27 12:30:49

易猫猫 发表于 2014-2-27 03:41 static/image/common/back.gif
短整型 按他的方法是不是只要把 前后颠倒一下就可以了,楼上的大家说的太专业





#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
        char a[]={0,0xC,0,0x58};
        short *b=(short *)a;
        short *c=(short *)a+1;
        printf("%02X %02X %02X %02X\n",a,a,a,a);
        printf("%d\n",*b>>8);//*b就是3072 左移8位就是12
        printf("%d\n",*c>>8);//*c就是22528,左移8位就是88
    system("pause");
        return 0;
}


魁山老妖 发表于 2014-2-27 22:40:05

楼主是好人。。。。

易猫猫 发表于 2014-2-28 20:44:38

谢谢楼上的所有朋友
页: [1]
查看完整版本: 不知如何问的问题 0x 00 58