JSB*_*ոգչ 17
我假设你char* name包含了你想要的短的字符串表示,即"15".
不要不投了char*,直接到非指针类型.C语言中的强制转换实际上根本不会更改数据(除了少数例外) - 它们只是通知编译器您希望将一种类型转换为另一种类型.如果你将a转换char*为a unsigned short,你将获取指针的值(与内容无关),砍掉所有不适合的东西short,然后扔掉其余部分.这绝对不是你想要的.
而是使用std::strtoul函数,它解析一个字符串并返回相应的数字:
unsigned short number = (unsigned short) strtoul(name, NULL, 0);
Run Code Online (Sandbox Code Playgroud)
(你仍然需要使用强制转换,因为它会strtoul返回一个unsigned long.这个强制转换是在两种不同的整数类型之间,因此是有效的.可能发生的最坏情况是内部的数字name太大short而不适合--a情况你可以在其他地方检查.)
#include <boost/lexical_cast.hpp>
unitId = boost::lexical_cast<unsigned short>(temp);
Run Code Online (Sandbox Code Playgroud)
要在C++中将字符串转换为二进制,您可以使用stringstream.
#include <sstream>
. . .
int somefunction()
{
unsigned short num;
char *name = "123";
std::stringstream ss(name);
ss >> num;
if (ss.fail() == false)
{
// You can write out the binary value of num. Since you mention
// cross platform in your question, be sure to enforce a byte order.
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
42526 次 |
| 最近记录: |