C 合并两个(uint8_t*)指针并转换为十进制

C 合并两个(uint8_t*)指针并转换为十进制,c,pointers,embedded,C,Pointers,Embedded,我对来自加速计的数据有问题。我能够读取加速计,但数据是指针(uint8\u t*)。嗯,我对C很陌生,但我认为它是一个指针。因此,我必须输入一些值,例如:0x1B和lsb0x29 我需要将这些值合并为一个值,并将其转换为十进制 因此,以二进制格式0x1B=0001 1011和0x29=0010 1001 我想要这个值0001 1011 0010 1001=6953 我看到一些代码使用字节定义的值合并这些值 Result=(Value1没有“以指针的形式出现”这样的东西。您收到的数据是二进制格式的

我对来自加速计的数据有问题。我能够读取加速计,但数据是指针(uint8\u t*)。嗯,我对C很陌生,但我认为它是一个指针。因此,我必须输入一些值,例如:0x1B和lsb0x29

我需要将这些值合并为一个值,并将其转换为十进制

因此,以二进制格式0x1B=0001 1011和0x29=0010 1001

我想要这个值0001 1011 0010 1001=6953

我看到一些代码使用字节定义的值合并这些值

Result=(Value1没有“以指针的形式出现”这样的东西。您收到的数据是二进制格式的数据。它所表示的内容与您想用它做什么完全不同。如果您将它作为十进制数进行计算,它将是一个。了解数据的格式很重要,但没有“以指针的形式出现”这样的内容.如果您确定给定的数据是您所需的十进制数据,则可以将其用作十进制


然而,指针是程序在初始化或内存分配时分配给它的变量的物理地址。它通常表示为十六进制数。但在同一程序多次执行时,该数字基本上是随机的。

您能尝试一下这些函数中是否有一个能够转换指针吗转换为整数值…这些应该可以在任何8位机器上编译

int ResultBigEndian (void *byteptr) {
    unsigned char *b=byteptr;
    return (b[0] << 8) + (b[1]);
}

int ResultLittleEndian (void *byteptr) {
    unsigned char *b=byteptr;
    return (b[1] << 8) + (b[0]);
}
int ResultBigEndian(void*byteptr){
无符号字符*b=byteptr;

返回(b[0]指针是一段内存的物理地址。将其转换为十进制将只返回垃圾数据。我假定您想要指针指向的变量中存储的内容。您已经拥有了它。在移位和或之后,“Result”包含二进制值。如果您将该值“转换”为其他任何内容,例如ASCII十进制st铃声响起时,您将失去使用软件进行进一步计算的能力。数字就是一个数字。十六进制、二进制、八进制、十进制等只是同一数字的表示形式。因此,您显示的
结果可以用作十进制数(或十六进制、八进制或二进制等)但是,由于您没有显示任何实际代码,我们无法真正判断这是否是您真正的意思。
uint8\u t*
很可能是加速计代码接口的一部分,我猜它是驱动程序中某个函数的参数?(SPI或I2C驱动程序?)在这种情况下,它指向存储数据的缓冲区。在这种情况下,您尝试执行的任何操作都没有任何意义。请提供一段代码,您在其中找到
uint8\u t*
,以便我们获得一些上下文。您为什么不直接执行
(uint16\u t)呢指针
?它是可移植的,因为指针和整数类型在任何机器上都具有相同的endianess。无论如何,我非常怀疑这是OP真正需要的。@Lundin好吧,也许是为了帮助他更好地理解这个问题……显然我应该先尝试一下你的方法,我只是想把这个问题隔离成一个c函数n,它可以将任何指针作为参数,并演示endianness的效果。如果endianness是正确的,并且指针对齐正确,那么您的强制转换就可以工作。但我只是在想,为什么结果是以8位指针而不是整数指针的形式给出的,原因可能是它是一些硬件数据被逐字复制和它的尾端可能是错误的…只是在这里猜测,真的…@fuzzxl-Umm-disaligned-how?这种情况将是一个16位地址总线,在这种情况下,如果16位CPU有一些模糊的对齐要求,我非常怀疑编译器是否会在未对齐的地址存储指针。在任何情况下,屏蔽单个字节都不会有帮助。@Lundin,它是c数据可能是以8位值的突发形式来自某个总线,这些值通过某个函数逐字节读取并存储到内存中。在这种情况下,二进制值不是由编译器生成的,可能是一些硬件吐出的二进制混乱,如果数据对齐或正确的尾端,或者确实是这样,那纯粹是运气即使是2的补码格式,位数也可能被8整除(有些输出12位数据)。在最坏的情况下,它可能需要一点一点地重新组装和解释-虽然可能不是…但它确实发生了…@PkP所有的通信协议都指定了它们自己的端,并且对齐根本不适用。无论如何,猜测是没有意义的,我怀疑在当前状态下回答这个问题是可能的。