一个整数而不是字符串?为啥? [复制]

Posted

技术标签:

【中文标题】一个整数而不是字符串?为啥? [复制]【英文标题】:An integer instead of string? Why? [duplicate]一个整数而不是字符串?为什么? [复制] 【发布时间】:2020-12-14 04:15:28 【问题描述】:

我正在一起使用 C# 和 C++ 进行一些实验,现在我被困在这里。这段代码既适用于懂 C# 的人,也适用于懂 C++ 的人。

我的 C# 代码 -

using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace std 
    class MyCode 
        static void Main(string[] args) 
            string name = "helloWorld!";
            Console.WriteLine(name[0] + name[1] + name[2] + name[3] + name[4] + name[5]);
        
     

我的 C++ 代码-

#include <iostream>
using namespace std;

int main() 
    string x = "helloWorld!";
    cout << x[0] + x[1] + x[2] + x[3] + x[4] + x[5] << endl;
    return 0;

这两个代码给出相同的输出 -

619


Process Finished.

我的预期输出 -

helloW


Process Finished.

【问题讨论】:

好吧,你还有一个类型溢出(字节或字符不能超过 255 = 0xff)和隐式转换为更大的类型(int 的最大值为 0xffffffff),因为 619不能用 char/byte 表示。但是,您可以将具有 4 个字符(4*32 位)的字符串数组中的“hell”、“oWor”等组合成一个 int 数组(1*32 位)并显示这些数字。 @Soleil-MathieuPrévot 如果我使用字符而不是整数会怎样?我知道这会令人困惑,但有可能吗? 好吧,看来您正在尝试在 c++/c# 上下文中使用 python 语法(它做了其他事情)。尝试将字节数组转换为另一种类型(int、long、long long):template&lt;class T&gt; T ToType(const byte* x) T value; for (int i = 0; i &lt; sizeof T; i++) value += ((long)x[i] &amp; 0xffL) &lt;&lt; 8 * i; return value; 。你这样使用它:ToType&lt;long long&gt;(charArray)unsigned char* charArray[someSize] 一般来说,就像在数学中一样,你想知道 + 函数到底是做什么的。它的定义可以不同于通常的定义(来自Peano的算术),它在程序语言中不是阿贝尔,在python中它在参数是字符串时连接它们,这里它是在做一个非交换加法。 【参考方案1】:

所有x[i] 都是字符。 Char 存储一个表示字符的数值,具体取决于您使用的编码。当您执行x[i] + x[j] 时,您并没有将它们连接起来,您只是将它们的数值相加。

【讨论】:

如果我使用字符而不是整数会怎样?我知道这会令人困惑,但有可能吗? 如果你想连接你将不得不使用字符串。

以上是关于一个整数而不是字符串?为啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Python 返回整数而不是字符串 [关闭]

为啥 C 字符文字是整数而不是字符?

为啥打印 char* 会给出字符串而不是地址? [复制]

为啥一个空数组等于一个空字符串,而不是 javascript 中的另一个空数组? [复制]

如何将 HTML 的 localStorage 设置为整数而不是字符串? [复制]

为啥整数 0 等于 PHP 中的字符串? [复制]