我想在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。 ¿我做错了什么?。
谢谢!!,我很抱歉我的英语。
答案 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
。