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

楼主: pziyout (pziyout)   2015-07-30 10:51:05
※ 引述《chuanmaotou (鲁蛇)》之铭言:
: 问题(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
这里的问题是 char 为有号字符,但阵列内存入超过 127 以上的字符,
不加以处理会造成问题
unsigned long long n , m ;
const int M = 8 ;
char s[M]={'\x00','\x00','\x00','\x6a','\x46','\xd2','\xdf','\x44'};
n = 0 ;
for ( int i = 0 ; i < M ; ++i ) {
m = static_cast<unsigned char>(s[i]) ;
n += ( m << (8*((M-1)-i) ) ) ;
}
cout << n << endl ;
输出:456454758212

Links booklink

Contact Us: admin [ a t ] ucptt.com