C++ 如何在C+中将char*转换为无符号短字符+;

C++ 如何在C+中将char*转换为无符号短字符+;,c++,c,pointers,casting,char,C++,C,Pointers,Casting,Char,我有一个char*name,它是我想要的短字符的字符串表示形式,例如“15”,需要将其作为无符号短unitId输出到一个二进制文件。该铸件还必须具有跨平台兼容性 这是正确的强制转换:unitId=unsigned short(temp) 请注意,我在理解二进制代码方面处于初级水平 假设temp也是char*,则该转换将为您提供(截断的)整数版本的指针。这几乎肯定不是您想要的(语法也是错误的)。 看看函数atoi,它可能是您所需要的,例如unitId=(unsigned short)(atoi(t

我有一个
char*name
,它是我想要的短字符的字符串表示形式,例如“15”,需要将其作为
无符号短unitId
输出到一个二进制文件。该铸件还必须具有跨平台兼容性

这是正确的强制转换:
unitId=unsigned short(temp)

请注意,我在理解二进制代码方面处于初级水平

假设temp也是char*,则该转换将为您提供(截断的)整数版本的指针。这几乎肯定不是您想要的(语法也是错误的)。 看看函数atoi,它可能是您所需要的,例如unitId=(unsigned short)(atoi(temp));
请注意,这假设(a)temp指向一个数字字符串,(b)这些数字表示一个可以放入无符号短字符的数字

我假设您的
char*name
包含所需短字符的字符串表示,即
“15”

不要将
char*
直接强制转换为非指针类型。C中的类型转换实际上根本不会更改数据(只有少数例外)——它们只是通知编译器您希望将一种类型转换为另一种类型。如果将
字符*
转换为
无符号短字符
,则将获取指针的值(与内容无关),切掉不适合
短字符的所有内容,然后丢弃其余内容。这绝对不是你想要的

改为使用函数,该函数解析字符串并返回等效数字:

unsigned short number = (unsigned short) strtoul(name, NULL, 0);
(您仍然需要使用强制转换,因为
strtoul
返回一个
无符号的long
。但是,此强制转换介于两种不同的整数类型之间,因此是有效的。最糟糕的情况是
name
中的数字太大,无法放入
short
,您可以在其他地方检查这种情况。)
#包括
unitId=boost::词法转换(临时);

<代码> > p> >将C++中的字符串转换为二进制,可以使用String Struts.<
#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.
    }
}
#包括
. . .
int somefunction()
{
无符号短数;
char*name=“123”;
std::stringstream ss(名称);
ss>>num;
如果(ss.fail()==false)
{
//您可以写出num.的二进制值,因为您提到
//跨平台在您的问题中,请确保强制执行字节顺序。
}
}
是指针
名称
是id还是
名称
指向的字符字符串?也就是说,如果
name
包含
“1234”
,是否需要将
1234
输出到该文件?我假设是这样的,因为另一种情况,您将使用
unitId=unsignedshort(name)
,肯定是错误的

然后您需要的是
strtoul()
函数

char * endp
unitId = (unsigned short)strtoul(name, &endp, 0);
if (endp == name) {
     /* The conversion failed. The string pointed to by name does not look like a number. */
}
在将二进制值写入文件时要小心;做显而易见的事情的结果现在可能会起作用,但可能无法移植。

如果您有一个数字的字符串(C中的char*表示),则必须使用适当的函数将该字符串转换为它所表示的数值

有几个函数可用于执行此操作。它们记录在这里:

首先为什么要将指针的值存储在文件中?您是否试图将指向字符串的指针用作某种类型的UID,类似于数据库中的主键?更多细节可能会有所帮助。我读取一个二进制文件并对其进行解析,然后转换数据并将其输出为新的二进制格式。我也在使用遗留代码。我真的需要学习如何将char*转换为unsigned short。嗯,在分配给
number
之前,您必须先检查它,例如,先分配给一个unsigned long,然后对照
USHRT\u MAX
进行检查。
char * endp
unitId = (unsigned short)strtoul(name, &endp, 0);
if (endp == name) {
     /* The conversion failed. The string pointed to by name does not look like a number. */
}