将unsigned char数组转换为int

时间:2014-07-22 12:44:22

标签: c++ arrays casting

我想将我的unsigned char数组转换为数字。显示我的变量没有问题,例如使用(" session:%d",session)模式,其中session是我的unsigned char数组,我得到的值类似于" session:1663616616"但我不知道如何将会话表转换为整数。 换句话说,我想以某种方式将表(?)转换为单个整数以使其具有#34; 1663616616"在里面。 我非常感谢你的帮助。

3 个答案:

答案 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)

如果sessionchar数组,则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;