C++ 将int 8_t转换为int,以便对其执行操作

C++ 将int 8_t转换为int,以便对其执行操作,c++,char,int,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
数组执行一系列操作,其中每个元素都存储了一个从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;
}

运行此命令时得到的输出是
149

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

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;
}
intmain(intargc,char*argv[]){

在C/C++中,小于int的int8_t v[4]={'0'、'1'、'2'、'3'};//类型会自动升级为int。但是
int8_t
是有符号类型,因此它无法在第一个代码段中存储255等值

对于第二个片段

int8_t v[4] = {'0','1','2','3'};
'0'=0x30=48
因为这是它的ASCII值,所以将它乘以3不会像您预期的那样得到0


要将字符值转换为数值,只需从中减去
'0'
,就像
v[i]-'0'

为什么不直接将其转换为:
y[i]=((int)v[i])*3;
这与他的代码相同,但更难看(
v[i]
在算术中使用时隐式转换为
int
)@丹尼尔,你的代码基本上写得很好,你能澄清你有什么问题吗?我说“基本上”因为
255
超出了
int8\u t
的范围。请使用
uint8\u t
或将
255
更改为其他内容,例如
-1
@MattMcNabb是的,对不起。我在实际代码中使用uint8\u t。我一直在尝试用测试代码解决这个问题,因为我使用的值低于10。有您可以执行的操作没有差别。如果您的操作溢出,则在操作后存储的内容也会有差别。您能给我们一个您尝试乘法的值的示例吗?精确的输入说明了问题,给出了什么输出以及您期望的输出。成功了!我有一个问题事实上,我从不声明实际数组,我直接从.txt文件导入它。当我这样做时,我得到的结果与我用引号声明的结果相同。有没有办法解决这个问题,将它从ascii码转换为所需的数值?是的,你需要将ascii字符转换为整数。有一个C库这是一个很简单的算法,而且,因为这是C++,所以我会给我的答案添加一个例子,使它简单。
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;
}
#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;
}
int8_t v[4] = {'0','1','2','3'};