将int8_t转换为int,因此我可以对它执行操作

时间:2014-04-09 02:10:20

标签: c++ char int

我正在研究一个代码,它必须对int8_t数组执行一系列操作,其中每个元素都有一个存储的数字,范围从0到255.

int main(int argc, char *argv[]){
    int8_t v = ...  // Imagine it's an array equal to {1, 10, 100, 255}.
    int y[4];
    for(int i=0;i<3;i++)
        y[i] = v[i]*3;

    return 0;
}

我正在寻找的是使用int8_t数组进行操作的方法,或者最好是将int8_t转换为int的方法(我有一个很大的代码,与int输入一起使用,将int8_t转换为int然后将其提供给我的代码所需的更改比将每个int更改为int8_t更少。

值得注意的是,int8_t数组来自摄像机的视频捕获,它以int8_t形式返回0到255之间每个像素的值,这意味着我可以' t改变输入数组。

任何帮助都将受到高度赞赏。

编辑:

虚拟代码,希望有助于说明我的问题。

int main(int argc, char *argv[]){

    int8_t v[4] = {'0','1','2','3'};

    int y;

    y = (int) v[1]*3;

    std::cout << v[1] << "  " << y << std::endl;

    return 0;
}

我运行时获得的输出是1 49

2 个答案:

答案 0 :(得分:1)

您的最新编辑错误地初始化了数组。

int main(int argc, char *argv[]){

    int8_t v[4] = {'0','1','2','3'}; // <- This is wrong!

    int y;

    y = (int) v[1]*3;

    std::cout << v[1] << "  " << y << std::endl;

    return 0;
}

单引号中的数字ASCII characters,其数字值与引号中的实际数字不匹配。

请修改您的代码,看看是否有帮助:

int main(int argc, char *argv[]){

    int8_t v[4] = {0, 1, 2, 3}; // <- Remove the single quotes

    int y;

    y = (int) v[1]*3;

    std::cout << v[1] << "  " << y << std::endl;

    return 0;
}

以下是ideone

的链接

跟进问题(来自评论):

  

我从不声明实际的数组,我直接从.txt文件导入它。当我这样做时,我得到的结果与我用引号声明的结果相同。有没有办法解决这个问题,将其从ascii代码转换为所需的数值?

是。您可以使用atoistoi函数将表示为文本的数字转换为整数。您还应该看看this link讨论如何使用流操作符来实现相同的目标。

但是,从字符串转换数字非常简单,所以我给你举个例子:

#include <iostream>
#include <string.h>

int getNumberFromString(const char* numberString)
{
    int number = 0;
    int i;
    int stringLength = strlen(numberString);

    for (i = 0; i < stringLength; ++i)
    {
        number *= 10;
        number += numberString[i] - '0';
    }

    return number;
}

int main()
{
    const char* numberSeventyNineString = "79"; // Equivalent to { '7', '9', '\0' }
    int numberSeventyNine;

    numberSeventyNine = getNumberFromString(numberSeventyNineString);

    std::cout << "Number (" << numberSeventyNineString << ") as int is: " << numberSeventyNine << std::endl;

    return 0;
}

这里是ideone link

注意: const char* numberSeventyNineString = "79"; // Equivalent to { '7', '9', '\0' }有一条评论说这相当于一个数组,有关详细信息,请参阅{{ 3}}

答案 1 :(得分:1)

在C / C ++中,小于int的类型会自动提升为int。但int8_t是签名类型,因此无法在第一个代码段中存储255 等值

对于第二个片段

int8_t v[4] = {'0','1','2','3'};

'0' = 0x30 = 48因为那是它的ASCII值,所以将它乘以3不会像预期的那样得到0

要将char值转换为其数值,只需从中减去'0',例如v[i] - '0'