[问题] 读bin能不要char或直接转uint*吗(已解决)

楼主: Ommm5566 (56天團)   2017-04-16 13:52:13
开发平台(Platform): win or unix
编译器: C++14
额外使用到的函数库(Library Used):std
问题(Question):
今天遇到一个API需要使用者自己先读取好档案
然后传大小和uint32_t*进去
但是读binary档案得到的好像只能是char或string
所以必须转换一次( char* -> void* -> uint32_t*)
1. 能够读档的时候就用uint32_t存吗?

2. char*转uint32_t*能不透过void*吗?
喂入的资料(Input): binary file
程式码(Code): http://cpp.sh/8cs7
补充说明(Supplement): 另外一个问题是,这样转换会不会有什么风险在?
作者: hunandy14 (Charlott.HonG)   2017-04-16 14:10:00
因为你没有使用正确的语法 reinterpret_cast看起来你并不在意混用cstyle,可以直接(uint32_t*)解决
作者: s25g5d4 (function(){})()   2017-04-16 15:35:00
要注意 little/big endian 问题前阵子刚好跟你做一样的事情 我是把 uint32_t 用 htonl通通转成 big endian 再 reinterpret_cast 写进去不过如果没有 portable 的需求的话可以忽略这个问题
作者: hunandy14 (Charlott.HonG)   2017-04-16 15:46:00
第一个问题可以这样解决 http://cpp.sh/4kv2n测试的时候懒得打直接写auto 忘记改回来~明写较好读
作者: kokal (细菌)   2017-04-16 22:31:00
作者: s25g5d4 (function(){})()   2017-04-16 23:36:00
@hunandy14 你的 fileSize 是以 byte 为单位但是你 call resize 是以 element size 为单位吧?
作者: hunandy14 (Charlott.HonG)   2017-04-16 23:57:00
我直接复制原文的,不晓得有什么不妥呢~阿我直接开txt测试有补一些语法,发现好像不一样顺手改了,没注意到呢~是不一样的不对呀没看好~仔细看写法是一样的~
作者: Sidney0503 (Sidney0503)   2017-04-17 07:15:00
读字不固定大小stackoverflow.com/questions/4850241binary都是01所以是 char 比uint小读不会有问题 转成unsigned int会有问题
作者: hunandy14 (Charlott.HonG)   2017-04-19 02:05:00
了解~~

Links booklink

Contact Us: admin [ a t ] ucptt.com