C++ c++;字符转换为int多字符常量

C++ c++;字符转换为int多字符常量,c++,char,int,decimal,C++,Char,Int,Decimal,你知道怎么做吗 假设我有 char x[] = "ABCD"; 我想把它转换成int,所以 int y = 'ABCD'; 我只能放置单个字符,例如inty=x[0]目的是查找十进制表示法,但我想要“ABCD”的十进制表示法,而不仅仅是“A” 最后,我将使用sprintf(dest,%.2u),value)获取字符的十进制表示形式 编辑: 我不明白为什么,但是对于“ABCD”这个代码是有效的 //unrolled bit ops const char* x = "ABCD"; uint32_

你知道怎么做吗

假设我有

char x[] = "ABCD";
我想把它转换成int,所以

int y = 'ABCD';
我只能放置单个字符,例如
inty=x[0]目的是查找十进制表示法,但我想要“ABCD”的十进制表示法,而不仅仅是“A”

最后,我将使用
sprintf(dest,%.2u),value)
获取字符的十进制表示形式

编辑:

我不明白为什么,但是对于“ABCD”这个代码是有效的

//unrolled bit ops
const char* x = "ABCD";
uint32_t y = 0;
y |= (uint32_t(x[0]) << 24); //MSB
y |= (uint32_t(x[1]) << 16);
y |= (uint32_t(x[2]) <<  8);
y |= (uint32_t(x[3]) /*<< 0*/);
输出:

40
-72
-2
-74
我在谷歌上搜索了完整的ascii表,发现“þ”的值是“254”。我想这和这个有关。。。我也尝试过使用usigned,但没有很好的效果


edit3:如果我用
int x[]={40184,184,254,182}替换
const char*x=“(¸þ”
”;
(每个字符的十进制表示形式,它可以工作。我可以理解哪里出了问题,但我不知道如何修复它。

您需要确保该字符数组的int对齐,以便正确转换,或者在该int中执行memcpy。 此外,使用诸如uint32_t之类的C99整数类型也将有助于使代码具有可移植性

有关如何转换位,请参见此问题:

编辑:

R.Martinho Fernandes的意思可能是(未经测试):

//展开位操作
const char*x=“ABCD”;
uint32_t y=0;

y |=(uint32_t(uint8_t(x[0]))如果这是您想要的,我已经创建了一个示例程序

包括所需的标题(stdio.h、stdlib.h、math.h、string.h)

void main(){

}

无符号长转换项(char*x){

unsigned long num=0,i,n`
char hex_c;
对于(i=0;i如果(hex_c>='0'&&hex_c='A'&&hex_c='A'&&hex_c='A'&&hex_c有一个外观,请使用位移位和按位or(以及适当大小的无符号类型)。以防万一您实际使用
”(¸
在您的程序中,它将中断,因为最后三个字符是多字节字符。编译器应该发出警告。这个问题涉及如何将特殊字符放入字符串文字:我试图将memcpy放入int uint32\u t x;memcpy(&x,value,4);@Alexandruclin,因为您正在处理内存。如果您要处理数字,请使用处理数字的操作(位移位)。@Alexandruclin,如果这会给您“错误的结果”,请编辑您的问题,以说明您期望的结果。@Alexandru Calin:您能为该字符串中的每个字节添加十六进制值以及从中得到的整数吗?看起来,您希望动态传递1-4个字符。为此,您需要某种偏移量。对不起,我想我不明白您的意思;您想让我这样做吗在移位之前,每个字节是十六进制吗?这不是关于转换十六进制数,而是关于获取字符的数字表示。“a”需要变成65,而不是10,“AB”应该是(65*256)+66
40
-72
-2
-74
//unrolled bit ops
const char* x = "ABCD";
uint32_t y = 0;
y |= (uint32_t(uint8_t(x[0])) << 24); //MSB
y |= (uint32_t(uint8_t(x[1])) << 16);
y |= (uint32_t(uint8_t(x[2])) <<  8);
y |= (uint32_t(uint8_t(x[3])) /*<< 0*/);
const char* x = "ABC";
size_t nChars = 3;

assert(0 < nChars && nChars <= sizeof(uint32_t));

uint32_t y = 0;

int shift = (nChars*8)-8;
for(size_t i = 0;i < nChars;++i)
{
    y |= (uint32_t(uint8_t(x[i])) << shift);
    shift -= 8;
}
unsigned long convertToInt(char *x);
char x[] = "ABCD";
unsigned long y = 0;

y = convertToInt(x);

printf("Numeric value = %lu\n", y);
unsigned long num = 0, i, n;`
char hex_c;

for(i = 0; i< strlen(x); i++)  {

    hex_c = x[i];

    if (hex_c >= '0' && hex_c <= '9') {
    n = hex_c - '0';
    } else if (hex_c >= 'A' && hex_c <= 'F') {
    n =  10 + hex_c - 'A';
    } else if (hex_c >= 'a' && hex_c <= 'f') {
    n = 10 + hex_c - 'a';
    } else {
        printf("Wrong input");
    return 0;
    }

    num += n * (pow(16, (strlen(x) - i - 1)));
}

return num;

}