我想将我的unsigned char数组转换为数字。显示我的变量没有问题,例如使用(" session:%d",session)模式,其中session是我的unsigned char数组,我得到的值类似于" session:1663616616"但我不知道如何将会话表转换为整数。 换句话说,我想以某种方式将表(?)转换为单个整数以使其具有#34; 1663616616"在里面。 我非常感谢你的帮助。
答案 0 :(得分:5)
使用标头std::stoi
中声明的C ++函数<string>
或C ++标头strtol
或C标头{{1}中声明的C函数atoi
或<cstdlib>
}
例如
<stdlib.h>
输出
#include <iostream>
#include <string>
int main()
{
unsigned char session[] = "1663616616";
int n = std::stoi( reinterpret_cast<char( & )[sizeof(session)]>( session ) );
std::cout << "n = " << n << std::endl;
return 0;
}
或者
n = 1663616616
在C ++中,等效代码看起来像
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
unsigned char session[] = "1663616616";
int n = atoi( session );
printf( "n = %d\n", n );
return 0;
}
或者您可以使用更简单的演员
#include <iostream>
#include <cstdlib>
int main()
{
unsigned char session[] = "1663616616";
int n = std::atoi( reinterpret_cast<char( & )[sizeof(session)]>( session ) );
std::cout << "n = " << n << std::endl;
return 0;
}
答案 1 :(得分:1)
如果session
是char
数组,则sprintf ("session: %d ", session)
会引发未定义的行为,因为%d
表示“session
是一个整数”
您应该改为sprintf ("session: %s", session)
,但要确保session
是以NULL结尾的字符串。
答案 2 :(得分:1)
您可以使用 boost / lexical_cast
像这样:
#include <iostream>
#include <boost/lexical_cast.hpp>
int main(int argc, char* argv[]) {
const char* str = "123456";
int a = boost::lexical_cast<int>(str);
std::cout << a << std::endl;
return 0;
}
这将处理所有可能的整数(负数)。
如果数字有限,也许您喜欢手工操作(此代码仅适用于正数,因为需要更多负逻辑),建议使用 lexical cast :
long end = strlen(str);
int b = 0;
for (long idx = 0; idx < end; idx++) {
b = (b * 10) + (str[idx] - '0');
}
std::cout << b << std::endl;