将字符*转换为数字的最快方法是什么
What is the quickest way to translate char* to number?
将字符*转换为数字的最快方法是什么?我需要将 4 个字符转换为 int,或将两个字符转换为短 int。我试过像
char* ar;
//fill ar with values
int x= ar[1]+1[2]<<8+ar[3]<<16+ar[4]<<24; // ar[0] number of chars for number (short 2, int 4)
但结果始终为零。(为了解释我将数字转换为字符*,然后通过网络发送,另一方面我正在尝试反向处理)。
使用atoi
函数:
#include <iostream>
#include <cstdlib>
int main ()
{
int i;
char * num = "325";
i = atoi (num);
std::cout << i << std::endl;
return 0;
}
编辑
正如注释中所指出的,您不应该使用atoi
函数,因为您无法看到转换中是否存在错误(如果失败,atoi
将返回 0,但这种情况int i = atoi("0");
呢)。当您使用C++时,可以选择使用stringstream
#include <iostream>
#include <sstream>
using namespace std;
int main()
{
char * num = "3443";
int result;
stringstream ss;
ss << num;
ss >> result;
if (!ss.fail()) {
cout << result << endl;
}
return 0;
}
不幸的是,我这里没有 C++11 编译器,所以我无法尝试使用 std::stoi
变体。
编辑 2
我已经做了一些快速的研究,这里有一个建议使用strtol
函数的主题:如何在C++中将字符串解析为 int?
ar[1]+1[2]<<8+ar[3]<<16+ar[4]<<24;
使用 c++ 运算符的优先级为:
(ar[1]+1[2]) << (8+ar[3]) << (16+ar[4]) << 24
难怪它总是 0。使用帕伦斯。你也可以使用|
,但我还是建议使用括号。
根据您的示例代码进行猜测,我认为这就是您正在寻找的(您真的有void*
而不是char*
???)
unsigned int getValue(char* c) {
if (c[0] == 0x2) {
return *(reinterpret_cast<unsigned short*>(c + 1));
} else if (c[0] == 0x4) {
return *(reinterpret_cast<unsigned int*>(c + 1));
} else {
assert(false);
}
}
int main() {
char c[5];
char d[5];
c[0] = 0x2;
d[0] = 0x4;
char* cStart = &c[1];
*(reinterpret_cast<unsigned short*>(cStart)) = 1000;
char* dStart = &d[1];
*(reinterpret_cast<unsigned int*>(dStart)) = 1123124;
std::cout << getValue(c) << std::endl;
std::cout << getValue(d) << std::endl;
return 0;
}
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 通过JNI传递数据数组的最快方法是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 在另一个类视图中添加最多2个图表的正确方法是什么
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 在C++中包含原型文件的正确方法是什么?
- 在 OpenCV C++ 中估计基本矩阵之前对相应点进行归一化的正确方法是什么?
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 将一系列整数放入类的最佳方法是什么?
- 从长整整转换为uint64_t的推荐方法是什么?
- 将此布尔值传递给此函数的最有效方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?