草庐IT

c++ - C/C++ 中是否有简写字节表示法?

我已经有一段时间没有使用C/C++编程了。对于我的生活,我不记得(或在谷歌中找到)如何进行以下工作。我认为有一种写重复字节串的速记方法,如下所示:0x00=>0x000000000xFF=>0xFFFFFFFF0xCD=>0xCDCDCDCD例如,如果我要声明intx=0xCD;printf("%d",x);它将打印3452816845,而不是205。我要疯了吗?是否可以不进行运行时移位(例如,通过预处理器处理它)? 最佳答案 最简单的方法是:0x1010101u*x我想不出任何可能更简单或更不言自明的语法...编辑:我看到您希望它

c++ - 如何递增表示为字符串的 IP 地址?

我有一个char类型的IP地址,比如charip="192.123.34.134"我想增加最后一个值(134)。有没有人我应该怎么做?我想,我应该把它转换成一个整数,然后再转换回来,但不幸的是我不知道怎么做?:(我正在使用C++。请帮帮我!谢谢你了 最佳答案 您可以使用inet_addr将IP地址从字符串转换为整数,然后,在对其进行操作之后,将其转换回带有inet_ntoa的字符串.参见thedocumentation对于这些功能,了解有关如何使用它们的更多信息。这是一个小函数,可以做你想做的事://NOTE:onlyworksfo

c++ - 如何使用 C++11 语言环境设施将 UTF-8 用作字符串的内部表示?

我正在编写一个处理文件和目录的可移植库。我想对我的输入(目录路径)和输出(文件路径)使用UTF-8。问题是,Windows让我在UTF-16-that-used-to-be-UCS-2和代码页之间做出选择。所以我必须将所有UTF-8字符串转换为UTF-16,将它们传递给WinAPI,然后将结果转换回UTF-8。C++11似乎提供了库只是为了这个,除了我所理解的,没有一个预定义的特化使用UTF-8作为内部(即我这边)编码——最接近的是UTF-16-to-UTF-8,它是与我想要的完全相反。所以这是第一个问题:1)如何使用codecvtthingamajigs将我的UTF-8字符串转换为U

C++ 指针与数组表示法

当我像这样声明一个新数组时:intfoo[5]foo真的是指向数组第一个元素的指针吗?我能做到吗:*(foo+2)访问数组的第三个元素?假设我正在制作一个二维数组:intfoo[3][4]foo现在是int**了吗? 最佳答案 不,'foo'在这两种情况下都是数组类型,但是当在表达式中使用'foo'时需要指针时,它会隐式转换为one(指向数组的第一个元素)。所有数组都有这种行为。在这种情况下,由于可以通过指针类型而不是数组来完成加法,因此“foo”被转换为“int*”。*(foo+2)//'foo'isimplicitlyconve

c++ - 变量的字节表示形式出现意外结果

我扫描了一个int变量的字节表示,得到了一些意想不到的结果。如果我这样做inta=127;cout我得到了预期的127。如果我这样做inta=256;cout我按预期得到1。但如果我这样做inta=128;cout我有4294967168,好吧……非常奇特。问题是:当查看值为128的int变量的第一个字节时,有没有办法得到128? 最佳答案 出于与(unsignedint)(char)128为4294967168相同的原因:char在大多数常用系统上默认已签名。128不适合带符号的8位数量,因此当您将其转换为char时,您会得到-1

c++ - auto using parens 可以表示函数原型(prototype)吗?

这个问题是由于无法对auto使用统一初始化语法而产生的。关键字,因为它将其视为std::initializer_list(评论中的解释here)。以下面的代码为例:classX{};intx(X());//functionprototype(1)autox(X());//copy/moveconstructionofanX,functionprototypeorcompile-timeerror?编译器对autox做了什么?每种可能性的推理:复制/移动构造:我认为这是正确的行为,因为(1)被视为一种缺陷。函数原型(prototype):似乎不太可能,因为没有尾随返回类型。编译时错误:如

c++ - 用一个字节表示一个 float

我有一种情况需要用单个char来表示float。这个'minifloat'需要表示的范围是0到10e-7,所以我们总是可以假设数字是+ve,指数-ve以节省空间。我考虑过的表示形式是3位指数和5位尾数(隐含1位),指数以10为底,即x=man*10^exp.要将float转换为我的迷你float,我计划使用frexp,并使用一些数学运算将基数2转换为基数10。这是明智的做法吗?或者有更好的方法来实现这一目标吗? 最佳答案 您是否真的需要该值是float(即随着值的缩放具有大致恒定的精度)?您将如何处理这些值?一个更简单(也更有效)的

c++ - 为什么要用树状数据结构来表示文字冒险游戏中的数据?

作为我的C++模块的作业,我必须构建一个文字冒险游戏。我面临的问题是概念性的;每个人都在说我应该使用树数据结构来表示我的游戏。我不明白的是为什么。假设我有一栋有4个房间的房子。我们可以将其想象成一个2x2数组。在每个房间里我都有两个对象。我想以这样一种方式显示这些数据,即我可以轻松地将我的角色从0x0移动到0x1(直接–1步,或间接–3步),同时随身携带一个物体。为什么使用树来保存所有数据更好,我的角色如何从一个节点移动到另一个节点?或者角色也是一个节点?我的角色不应该是一个以列表作为list的对象吗?我对此有点困惑。我不是在寻找任何代码,只是为了更好地理解数据表示和操作。建议是针对m

c++ - 如何以 2³² 为基数表示数字?

如果我有一些以10为底数或以16为底数的数字,我如何将其更改为以232为底数?我尝试这样做的原因是为了按照此处其他成员的建议实现BigIntWhytousehigherbaseforimplementingBigInt?它是否与232之前的整数(以10为底)相同?之后会发生什么? 最佳答案 你正试图找到某种形式的东西a0+a1*(2^32)+a2*(2^32)^2+a3*(2^32)^3+...这正是base-232系统的定义,所以请忽略所有告诉您您的问题没有意义的人!无论如何,您所描述的是baseconversion。.有快速的方

c++ - 为什么OO概念接口(interface)在C++中不用关键字来表示?

Java等语言明确使用interface关键字来表示interfaces.在使用过Java之后,这个概念对我来说似乎很有用,足以证明一个关键字可以强制执行这个概念。当然可以使用纯虚类并将其标记为接口(interface)。然而,这个关键字似乎非常有用,并且与纯虚类区分开来,以至于有用。也许它包含在C++0x中? 最佳答案 因为C++允许多重继承,并且因为接口(interface)是一个抽象类,它的所有成员也是抽象/虚拟的,所以C++不需要它-一个类可以简单地“扩展”多个其他类,其中任何一个都可以是纯虚拟(抽象)。另一方面,Java和