char和int之间的C ++转换,结果错误

时间:2013-10-14 21:35:49

标签: c++ string

我想在c ++中转换char和int,但我发现char转换为int有问题。

我用两个数字103和155进行了测试.103给了我“g”的char和155给我“ø”并且两者都是正确的,但问题是当我试图将字符返回到int时:“g “给我103(正确),但我不知道为什么”ø“给我-101。

我正在使用char变量来存储数字,并且“prinf(”%d“,char [x]);”显示数字。

我有这个测试脚本:

#include <cstdlib>
#include <cstdio>

using namespace std;

int numero = 26523;    

char *inttochar(int number) {
    char *salida;
    for (int j=0;j<=5;j++) {
        salida[5-j] = number % 256;
        printf("%d = %d = %c = %c = %d\n", 5-j, number % 256, number % 256, salida[5-j], salida[5-j]);
        number = number / 256;
    }
    return salida;
}

int main(int argc, char** argv) {
    char *texto = inttochar(numero);

    for (int j=0;j<=5;j++) {
        printf("%d: ", j+1);
        printf("%c = %d\n", texto[j], texto[j]);
    }

    return 0;
}

结果是:

5 = 155 = ø = ø = -101
4 = 103 = g = g = 103
3 = 0 =   =   = 0
2 = 0 =   =   = 0
1 = 0 =   =   = 0
0 = 0 =   =   = 0
1:   = 0
2:   = 0
3:   = 0
4:   = 0
5: g = 103
6: ø = -101

使用此脚本,我想将数字转换为基数256 char。 ¿我做错了什么?。

谢谢!!,我很抱歉我的英语。

2 个答案:

答案 0 :(得分:2)

字符是-128到127之间的有符号值(在大多数系统上)。你正在从那个范围外转换一些东西;转换为char截断,但位模式正常。转换另一个方向会让您回到范围内,并且155不是其中的一部分。 155的位模式是0x9b;要转换为有符号值,您可以反转这些位并添加一个,因此它变为-0x65,即十进制的-101。

您可以使用and修复它,剥离扩展符号位:salida[5-j] & 0xff

编辑:如评论中所述,您的salida变量旨在成为字符串,但您永远不会为其分配任何存储空间。

char *salida = new char[6];

答案 1 :(得分:0)

char似乎是您平台上的已签名类型。这意味着155不适合它。您将155解释为2的补码有符号数,等于-101