作者a22326284 (chin)
看板C_and_CPP
标题[问题]Float的资料用Char的Buffer传输
时间Thu Feb 25 00:31:22 2016
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
IAR
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
无
问题(Question):
感测器转换完的资料用Float的变数储存
但传输的Buffer是定义为Unsigned Char
请问该如何藉由此Buffer传资料
喂入的资料(Input):
Float的资料
预期的正确结果(Expected Output):
能在接收端收到有小数点的资料
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版)
补充说明(Supplement):
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.240.157.51
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1456331484.A.118.html
2F:→ longlongint: Java: How to convert a String of Binary values to 02/25 01:19
3F:→ longlongint: a Float and vice-versa? 02/25 01:19
4F:→ longlongint: 啊 看错版了...... 02/25 01:21
6F:→ longlongint: 先用偷吃步试试看 如果不行就找api或照格式自刻 02/25 01:31
7F:推 stupid0319: union char[4] and float ? 02/25 04:16
8F:推 chuegou: union也不错,不过我现在是用指标指到float开头 02/25 09:40
9F:推 ss780217: union最简单 02/25 10:03
10F:推 qscgy4: 我用叙述的讲一次,实作不会再说… 02/25 10:12
11F:→ qscgy4: 1.假设你的有效小数要两位 02/25 10:13
12F:→ qscgy4: 2. 先乘100,存入int变数 02/25 10:14
13F:→ qscgy4: 3.假设int为32bit,你就要拆成4个byte,存到unsigned char 02/25 10:15
14F:→ qscgy4: 4.接收端接收这4个byte後,重组并除100存入float变数 02/25 10:16
15F:→ qscgy4: 补充:建议可以加入checksum 02/25 10:17
16F:→ x000032001: 那就直接把float拆成4bytes 不是最快 02/25 16:35
17F:推 qscgy4: 楼上不懂可不可以不要出来嘴? 02/25 16:49
18F:→ qscgy4: 1.假设他的接收端浮点数不是4byte,你要怎麽处理? 02/25 16:51
19F:→ qscgy4: 2.我说的方法可以在在不同变数大小轻易转换,不用任何lib 02/25 16:52
20F:→ qscgy4: 3.不用任何lib的状况下,我是不会拆浮点数啦 02/25 16:55
21F:→ qscgy4: 可以教一下吗? 02/25 16:55
22F:推 askacis: IEEE754转出来丢过去就好了,接受端一样解回来 02/25 17:54
23F:→ x000032001: 对阿 就IEEE754 顶多转8bytes再传 这麽凶喔 QQ 02/25 17:56
24F:推 askacis: 而且IEEE754不用什麽lib啊,Bit wise弄一下就好 02/25 17:59
25F:→ askacis: 我想应该有大一程度应该就会拆浮点数了^^ 02/25 18:01
26F:→ askacis: 资料封装这些东西都有RFC可以看,可以参考RFC4506 02/25 18:03
27F:→ a22326284: 板上太多高手了 我有看了一下union应该也是一种方法 02/25 19:39
28F:→ a22326284: 但小弟我昨天还有找到一个叫snprintf的函式 它也可以 02/25 19:39
29F:→ a22326284: 将浮点数直接格式化成字串 不知道这样会不会有什麽缺点 02/25 19:39
31F:推 qscgy4: sorry, 小弟不才,受教了,没用过union这个方法 02/25 19:56
32F:→ qscgy4: 之前都是为了避免 MUC与电脑的变数大小不同才这样做 02/25 19:57
33F:→ qscgy4: 回 Caesar08 转字串可以,但比较没效率,浪费空间还有时间 02/25 19:58
34F:→ Caesar08: qscgy4,但他的buffer是unsigned char,有更好的方法吗? 02/25 20:19
35F:→ qscgy4: 假设你要传字串传一个float长度会不固定,或是固定很长 02/25 20:21
36F:→ qscgy4: 另外value->char,再char->value 很没效率 02/25 20:22
37F:→ qscgy4: 我都是照我上面讲的做法做,变成int後分别右移8,16,24,32 02/25 20:24
38F:→ qscgy4: 存入要传输的unsinged char,最後做checksum丢出去 02/25 20:25
39F:→ qscgy4: 另外更正一样是MCU...打错了= = 02/25 20:26
40F:推 chuegou: 推 qscgy4: 楼上不懂可不可以不要出来嘴? 这wwww 02/25 22:07
41F:→ chuegou: union跟指标阵列都可以拆,原本想说你推很辛苦不想吐槽你 02/25 22:08
42F:→ chuegou: 结果超凶der 02/25 22:08
43F:推 ronin728: 用union的话会不会有byte order的问题?虽然我没确认过会 02/26 03:51
44F:→ ronin728: 不会在这发生,但多留意一下为妙 02/26 03:51
45F:→ k1400: 不懂可不可以不要出来嘴? 02/26 08:42
46F:推 stupid0319: 原PO也没说Buffer是序列还是并列,不知道大家在吵什麽 02/26 12:03
47F:推 stupid0319: 如果是8个脚位的并列Buffer,那实作方式还是有差别的 02/26 12:06
48F:推 stupid0319: 以感测器的规格跟Sample为准吧,原厂应该都有资料 02/26 12:12
49F:→ stupid0319: 没有原厂的资料来问,谁会知道感测器原厂的晶片怎写的 02/26 12:15