gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:13:36 25 4
gpt4 key购买 nike

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

我用两个数字 103 和 155 做了一个测试。103 给我 char 中的“g”,155 给我“ø”,两者都是正确的,但问题是当我尝试将 char 返回到 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 字符。 ¿我做错了什么?

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

最佳答案

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

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

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

char *salida = new char[6];

关于char 和 int 之间的 C++ 转换结果错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19369708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com