Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C++将十六进制字符串转换为有符号整数

C++将十六进制字符串转换为有符号整数
EN

Stack Overflow用户
提问于 2009-07-01 09:55:23
回答 8查看 398.4K关注 0票数 144

我想在C++中将十六进制字符串转换为32位有符号整数。

例如,我有一个十六进制字符串"fffefffe“。它的二进制表示是1111111111111010111111111111111111111110。它的带符号整数表示是:-65538。

如何在C++中执行此转换?这也需要对非负数起作用。例如,十六进制字符串"0000000A",它是二进制的0000000000000000000000000000000000001010和十进制的10。

EN

回答 8

Stack Overflow用户

发布于 2009-07-01 10:03:47

对于同时使用C和C++的方法,您可能需要考虑使用标准库函数strtol()。

代码语言:javascript
运行
AI代码解释
复制
#include <cstdlib>
#include <iostream>
using namespace std;

int main() {
    string s = "abcd";
    char * p;
    long n = strtol( s.c_str(), & p, 16 );
    if ( * p != 0 ) { //my bad edit was here
        cout << "not a number" << endl;
    }
    else {
        cout << n << endl;
    }
}
票数 65
EN

Stack Overflow用户

发布于 2010-01-17 02:08:05

Andy Buchanan,就坚持使用C++而言,我喜欢你的,但我有几个mod:

代码语言:javascript
运行
AI代码解释
复制
template <typename ElemT>
struct HexTo {
    ElemT value;
    operator ElemT() const {return value;}
    friend std::istream& operator>>(std::istream& in, HexTo& out) {
        in >> std::hex >> out.value;
        return in;
    }
};

使用方式如下

代码语言:javascript
运行
AI代码解释
复制
uint32_t value = boost::lexical_cast<HexTo<uint32_t> >("0x2a");

这样,您就不需要为每个int类型执行一次impl。

票数 27
EN

Stack Overflow用户

发布于 2009-07-01 22:03:47

使用strtoul的工作示例如下:

代码语言:javascript
运行
AI代码解释
复制
#include <cstdlib>
#include <iostream>
using namespace std;

int main() { 
    string s = "fffefffe";
    char * p;
    long n = strtoul( s.c_str(), & p, 16 ); 
    if ( * p != 0 ) {  
        cout << "not a number" << endl;
    }    else {  
        cout << n << endl;
    }
}

strtolstring转换为long。在我的电脑上,numeric_limits<long>::max()给了0x7fffffff。显然,0xfffefffe0x7fffffff更重要。因此,strtol返回MAX_LONG而不是所需的值。strtoulstring转换为unsigned long,这就是在这种情况下没有溢出的原因。

好的,在转换之前,strtol正在考虑输入字符串,而不是32位有符号整数。strtol的有趣示例

代码语言:javascript
运行
AI代码解释
复制
#include <cstdlib>
#include <iostream>
using namespace std;

int main() { 
    string s = "-0x10002";
    char * p;
    long n = strtol( s.c_str(), & p, 16 ); 
    if ( * p != 0 ) {  
        cout << "not a number" << endl;
    }    else {  
        cout << n << endl;
    }
}

上面的代码在控制台中打印-65538

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1070497

复制
相关文章
Java 二维数组转换成List<List<String>>[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/151734.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/31
3K1
java传递二维数组_java二维数组
1.InputMisMatchException 输入类型不匹配;int string
全栈程序员站长
2022/08/11
2.5K0
java传递二维数组_java二维数组
java二维数组坐标_Java 二维数组
因为数组只能保存一行数据。在生活中,比如坐标等等,我们需要用二维数组来表示。通过行号和列好来定位数据。
全栈程序员站长
2022/07/01
2.3K0
二维数组
二维数组可以存储具有二维关系的相同类型大量数据。二维数组在使用时需要两个下标才能确定数组的元素,其定义的一般形式如下:
pigeon
2022/04/11
1.5K0
二维数组
二维数组
新建JS文件 24-multi-array.js ,编写下方程序,运行看看效果吧。
鹤川
2023/03/21
1.2K0
二维数组
二维数组
2、数据类型 数组名[行数][列数] = {{数据1,数据2},{数据3,数据4}};
用户10731060
2023/08/29
2110
二维数组和指针_二维数组与指针
二维数组和指针⑴ 用指针表示二维数组元素。 要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知道,一个二维数组在计算机中存储时,是按照先行后列的顺序依次存储的,当把每一行看作一个整体,即视为一个大的数组元素时,这个存储的二维数组也就变成了一个一维数组了。而每个大数组元素对应二维数组的一行,我们就称之为行数组元素,显然每个行数组元素都是一个一维数组
全栈程序员站长
2022/11/17
1.5K0
java二维对象数组_java 二维数组和对象数组
1 public classTestArray2 {2 public static voidmain(String[] args) {3 //二维数组不是规则的矩阵
全栈程序员站长
2022/06/28
3K0
java二维对象数组_java 二维数组和对象数组
java交换二维数组行列_java二维数组行列
培训系列AmberXie 求二维数组行列之和把二维数组 a 各行之和分别放入 b…
全栈程序员站长
2022/06/26
1.9K0
交换二维数组
沿对角线交换NxN的二维数组的行、列数据 对角线往右的点,才需要交换;往左的点不用交换,避免重复交换。 public class Main { private void print(int[]
小锋学长生活大爆炸
2020/08/28
1.1K0
二维数组使用
上面的代码相当于定义了一个3*4的二维数组,即二维数组的长度为3,二维数组中的每个元素又是一个长度为4的数组,接下来通过一个图来表示这种情况,如下图所示。
星哥玩云
2022/09/14
7060
二维数组使用
二维变长数组
/* * 数组内元素的位置是不变的,只是数组容量的大小发生了变化。 * 简单来说,就是将数组的左上角元素平移到新数组的相同位置。 * */ template<class T> void changeLength2D(T**& a,int oldRows int copyRows,int copyColumns, int newRows,int newColumns) { if(copyRows > newRo
青木
2018/05/28
1.1K0
5.2 二维数组
为了让大家有个明确的学习方向,请大家分享给有需要的人,谢谢! 一、定义二维数组 一般形式 类型说明符 数组名[常量表达式][常量表达式] 注意:用矩阵形式表示二维数组,是逻辑上的概念,能形象的表示
小林C语言
2019/08/19
7890
6.2 二维数组
3、用矩阵形式表示二维数组,是逻辑上的概念,能形象地表示出行列关系,而在内存中,各元素是连续存放的,不是二维的,是线性的。
小林C语言
2020/12/07
6870
6.2 二维数组
【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )
指针数组 的 结构特征 是 , 数组中的每个元素 , 即每个指针变量 可以 指向不同大小的 内存块 ;
韩曙亮
2023/03/29
1.6K0
【C 语言】二级指针作为输入 ( 二维数组 | 二维数组遍历 | 二维数组排序 )
python二维列表排序
使用 lambda 关键词辅助对二维列表进行排序,lambda的使用方法参考https://blog.csdn.net/zjuxsl/article/details/79437563
py3study
2020/01/03
2.6K0
二维数组打印
  有一个二维数组,我想打印它,该怎么做呢? int a[5][5] = { {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}, };   君君常规操作: for(int i = 0; i < 5; i+
Qt君
2023/03/17
8150
二维数组打印
6.2 二维数组
3、用矩阵形式表示二维数组,是逻辑上的概念,能形象地表示出行列关系,而在内存中,各元素是连续存放的,不是二维的,是线性的。
小林C语言
2019/07/12
5500
java二维数组
引言: 上一次我们讲了java的一维数组,今天我们来讲java的二维数组。 正文: 二维数组的声明: 格式一:数组元素类型 数组名[][]; int arr[][]; 格式二:数组元素类型[][] 数组名; int[][] arr; 注:元素类型可以是java的基本数据类型,也可以是类或者接口。 二维数组的初始化: 1.使用new操作符初始化(动态初始化): 例: int arr[][] = new int[2][3]; 2.直接初始化(静态初始化): 例:int[][] arr = {{
taoli
2022/09/30
6090
java二维数组
java map 二维数组_Java二维数组实现简单Map
这些天频繁的在使用二维数组,让我觉得二维数组要比Map更灵活多变,以前和别人提起“数据结构”总能听到有人问:“如果编程语言里没有HashMap,你能自己实现一个Map来用么?”。熟练了二维数组,今天我就来尝试实现一个最简单的Map吧,我没有参考网上的例子,也没去想数据结构书中是怎么讲的,纯粹的自己个一个设计方案,中途遇到很多问题,但还是逐个解决了,还有很多不足之处,希望大家能帮我指点指点,一起交流一下学术。好了,不多说了,还是第一次去实现Map这东西,先看代码吧~
全栈程序员站长
2022/09/01
9300

相似问题

如何将二维列表转换成二维数值数组?

42

数值排序二维数组

10

如何将二维数组转换成一维数组?

56

如何将一维数组转换成二维数组?

94

JavaScript排序二维数组,数值

51
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档