[问题] 读取十六进位制字串再转成integer

楼主: chuanmaotou (0xFFFFFFFF)   2015-06-17 10:42:59
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
C++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
STL
问题(Question):
从一个二进位制的档案读入资料将他转换成64bit-signed int
内容大概像这样
char s[9]={'\x00','\x00','\x00','\x6a','\x46','\xd2','\xdf','\x44'};
原本我是自己写一个函式用位元运算硬转 但因为是signed integer还有负数
处里很复杂 所以放弃自己写一个函式来转
有翻过cpp reference 似乎可以用stringstream来转换
但试验后 似乎必须是*s="0x0000006a46d2df44"这类的形式才能直接用stringstream转
有想过把'\xff'形式的字符转成"FF"后喂给stringstream
但似乎又有点多此一举 不知道是不是有什么更好的方法可以转换?
喂入的资料(Input):
char s[9]={'\x00','\x00','\x00','\x6a','\x46','\xd2','\xdf','\x44'};
(一个从档案读入的hex字串 00 00 00 6A 46 D2 DF 44 )
预期的正确结果(Expected Output):
456454758212
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版)
补充说明(Supplement):
作者: azureblaze (AzureBlaze)   2015-06-17 10:46:00
作者: Feis (永远睡不着 @@)   2015-06-17 10:54:00
int64_t, 然后可能有 order 的问题
楼主: chuanmaotou (0xFFFFFFFF)   2015-06-17 11:04:00
刚刚试了一下reinterpret_cast 答案似乎不正确不知道是不是因为资料是big endian所致?
作者: x000032001 (版废了该走了)   2015-06-17 11:23:00
楼主: chuanmaotou (0xFFFFFFFF)   2015-06-17 11:47:00
刚刚我把uint64_t改成int64_t(因为输入是signed integer)结果好像遇到negative integer会有问题比方FF FF FF 96 BA 2E 21 BC出来是FF FF FF 97 BB 2F 22 BC会不会是因为1's和2's complement的差异所造成?
作者: anyoiuo   2015-06-17 14:26:00
http://ideone.com/dfPpUThttps://ideone.com/qvmfL2假如你hex档是存二进制(ex. 44 DF D2 46 6A 00 00 00...)这样可以直接fread(i64Array, sizeof(int64_t), count)fread(i64Array, sizeof(int64_t), i64Count, fin);

Links booklink

Contact Us: admin [ a t ] ucptt.com