如何在C++中将char*转换为unsigned short

Elp*_*rto 8 c c++ pointers casting char

我有一个char* name字符串表示我想要的短,如"15",需要输出这个unsigned short unitId二进制文件.此演员表也必须是跨平台兼容的.

这是正确的演员: unitId = unsigned short(temp);

请注意,我在初学者水平上理解二进制.

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情况你可以在其他地方检查.)


fre*_*low 9

#include <boost/lexical_cast.hpp>

unitId = boost::lexical_cast<unsigned short>(temp);
Run Code Online (Sandbox Code Playgroud)


Ama*_*9MF 6

要在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)