1

我想在 C++ 中在 char 和 int 之间进行转换,但我发现 char 到 int 转换的问题。

我用两个数字进行了测试,103 和 155。103 给我 char 中的“g”,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 进制字符。¿ 我做错了什么?

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

4

2 回答 2

2

字符是介于 -128 和 127 之间的有符号值(在大多数系统上)。您正在转换该范围之外的东西;转换为char截断,但位模式没问题。转换另一个方向会使您回到范围内,而 155 不是其中的一部分。155 的位模式是 0x9b;要转换为有符号值,请反转位并加一,因此它变为 -0x65,即十进制的 -101。

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

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

char *salida = new char[6];
于 2013-10-14T21:38:33.957 回答
0

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

于 2013-10-14T21:38:02.093 回答