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. */
}