将char*转换为uint8_t

Eva*_*eil 6 c++ char data-conversion uint8t

通过CAN协议传输消息.

为此,CAN消息需要uint8_t类型的数据.所以我需要将我的char*转换为uint8_t.通过我对该网站的研究,我生成了这个代码:

    char* bufferSlidePressure = ui->canDataModifiableTableWidget->item(6,3)->text().toUtf8().data();//My char*

    /* Conversion */
    uint8_t slidePressure [8];
    sscanf(bufferSlidePressure,"%c",
        &slidePressure[0]);
Run Code Online (Sandbox Code Playgroud)

如你所见,我char*必须适应sliderPressure[0].

我的问题是,即使我在编译期间没有错误,slidePressure中的数据也完全不正确.实际上,我用a测试它char* = 0并且我有未知的角色......所以我认为问题必须来自转换.

我的数据可以Bool, Uchar, Ushort and float.

谢谢你的帮助.

car*_*ose 7

你的字符串是数字吗?比如char* bufferSlidePressure = "123";

如果是这样,我会这样做:

uint8_t slidePressure = (uint8_t)atoi(bufferSlidePressure);
Run Code Online (Sandbox Code Playgroud)

或者,如果您需要将其放入数组中:

slidePressure[0] = (uint8_t)atoi(bufferSlidePressure);
Run Code Online (Sandbox Code Playgroud)

编辑:在您的评论之后,如果您的数据可能是任何内容,我猜您必须将其复制到新数据类型的缓冲区中.例如:

/* in case you'd expect a float*/
float slidePressure;
memcpy(&slidePressure, bufferSlidePressure, sizeof(float));

/* in case you'd expect a bool*/
bool isSlidePressure;
memcpy(&isSlidePressure, bufferSlidePressure, sizeof(bool));

/*same thing for uint8_t, etc */

/* in case you'd expect char buffer, just a byte to byte copy */
char * slidePressure = new char[ size ]; // or a stack buffer 
memcpy(slidePressure, (const char*)bufferSlidePressure, size ); // no sizeof, since sizeof(char)=1
Run Code Online (Sandbox Code Playgroud)