16进制数 与 uint8_t 数据类型转换

u010172675 2014-04-07 03:45:04
小弟想请教一下:

我需要传输一些16进制的数,比如0x11, 0xAC之类的。但是可用的传输函数接口如下:
transmit(const uint8_t *tx)

这之间的类型怎么转换?好像不能直接强制转换?
麻烦高手解答一下。。最好能详细一点,谢谢
...全文
2770 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2014-04-08
  • 打赏
  • 举报
回复
严重怀疑不带长度的transmit函数如何工作。
xiaohuh421 2014-04-08
  • 打赏
  • 举报
回复
只要你保证字节数不变即可. 内存中不管哪种数据类型基本单位都是字节, 只是占用字节不同而以. int intBuf[100] ; short shBuf[100] char chBuf[100]; transmit( (const uint8_t*)intBuf); 发送 100*4字节 (假设int为4字节, int8_t为1字节) transmit( (const uint8_t*)shBuf); 发送 100*2字节 (假设short为2字节) transmit( (const uint8_t*)chBuf); 发送100字节.
u010172675 2014-04-08
  • 打赏
  • 举报
回复
引用 9 楼 xiaohuh421 的回复:
因为函数的定义决定了你只能专指针, 如果你想输入常数, 那么你就需要想办法得到常数的地址. 因为常数就是一个立即数, 是没有存储空间的. 但函数又需要空间的地址 所以, 只能使用中间变量了.
我理解了。 现在已经解决了。也是通过再封装一个。 void transmit1(uint8_t data) { const uint8_t *data11 = &data; transmit(data11); } 这样避免了修改接口,也避免了把要传输的数据先放在一个表里再一个个拿出来了。 谢谢,分给你。
xiaohuh421 2014-04-08
  • 打赏
  • 举报
回复
因为函数的定义决定了你只能专指针, 如果你想输入常数, 那么你就需要想办法得到常数的地址. 因为常数就是一个立即数, 是没有存储空间的. 但函数又需要空间的地址 所以, 只能使用中间变量了.
xiaohuh421 2014-04-08
  • 打赏
  • 举报
回复
如果这样的代码: const uint8_t a = 0xAA; transmit(&a); 你都懒得写. 那么你可以再封装一个函数出来 transmit( uint8_t val) { transmit(&val); } 好了, 现在你可以这样调用了 transmit(0x20);
u010172675 2014-04-08
  • 打赏
  • 举报
回复
引用 2 楼 xiaohuh421 的回复:
只要你保证字节数不变即可. 内存中不管哪种数据类型基本单位都是字节, 只是占用字节不同而以. int intBuf[100] ; short shBuf[100] char chBuf[100]; transmit( (const uint8_t*)intBuf); 发送 100*4字节 (假设int为4字节, int8_t为1字节) transmit( (const uint8_t*)shBuf); 发送 100*2字节 (假设short为2字节) transmit( (const uint8_t*)chBuf); 发送100字节.
谢谢回复。 字节数不变,所有数据都是8bit。0x20, 0x21....但是不能强制转换作为参数传入的数据。 比如transmit((const uint8_t *)0x20);这样不可以。。 我知道可以这样: const uint8_t a = 0xAA; transmit(&a); 但是我希望能够把数据直接作为传入参数。有什么其他办法么?谢谢。
u010172675 2014-04-08
  • 打赏
  • 举报
回复
引用 3 楼 zhao4zhong1 的回复:
严重怀疑不带长度的transmit函数如何工作。
谢谢回复。 有其他参数,包括长度,我只给了这个有关的接口。。 spi_master_tx_rx(uint32_t *spi_base_address, uint16_t transfer_size, const uint8_t *tx_data, uint8_t *rx_data)
u010172675 2014-04-08
  • 打赏
  • 举报
回复
引用 1 楼 u012586257 的回复:
我觉得可以直接转吧,有什么问题吗?都是无符号8位整数 比如 unsigned char c = 0xAC; transmit((uint8_t *)&c);
谢谢回复。 确实,你这样写是可以的。但是这就要我把所有需要传输的数据都先定义在一个数组里。。而我希望是能直接把0xAC这样的数据作为参数给函数直接使用。。
todo9351 2014-04-08
  • 打赏
  • 举报
回复
引用
我需要传输一些16进制的数,比如0x11, 0xAC之类的。但是可用的传输函数接口如下: transmit(const uint8_t *tx)
1 16进制的字符串 “0x1123456789”这样,还是int的16进制数。这个处理是不一样的。 2 transmit(const uint8_t *tx) 这个函数的入口参数是什么意思,你是要传字符串的首地址吗,亲
mangoalx 2014-04-07
  • 打赏
  • 举报
回复
我觉得可以直接转吧,有什么问题吗?都是无符号8位整数 比如 unsigned char c = 0xAC; transmit((uint8_t *)&c);

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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