无法从字符指针复制到短
Can't copy from char pointer to short
我有一个包含以下信息的字符指针:
char* data = "22";
我想将其从字符复制到一个短变量中。我有以下代码:
short BinarySerializer::getMessageTypeID(char* data)
{
short* messageTypeID;
memcpy( messageTypeID, data, sizeof( messageTypeID ) );
return *messageTypeID;
}
我不知道为什么,但是当我打印它时,我得到:12850。
这就是我打印它的方式:
short temp = msg->messageTypeID;
cout << "Message ID is: " << temp << endl;
提前致谢
让我们看一下内存,假设 short 的大小是 char 大小的两倍(并非总是如此!
带有"22"字符串的字符数组在内存中:
5050
岁所以基本上
00110010 00110010
当你把它短到一个短的,你会得到一个数字,由两个字节组成:
00110010 00110010
翻译成十进制,意思是 12850。
现在,我认为您真的想将"22"ascii 表转换为"22"值。在这种情况下,您可以参考
将字符串转换为整数C++
如果您确实需要支持"23123dsdwdwqdwqdwqd"之类的字符串(这种情况很少见),您可以复制所需大小的子字符串并处理该子字符串。
请记住,当涉及到可变尺寸时,C++标准唯一保证
的是sizeof(char) <= sizeof (short) <= sizeof(int) <= sizeof(long)
因此,如果您依赖于sizeof(short) = 2 * sizeof(char)
的事实,那么您根本不是便携式的。
也许你的意思是以下内容
#include <iostream>
#include <sstream>
#include <numeric>
#include <cstring>
struct BinarySerializer
{
short getMessageTypeID( const char *data ) const;
short getMessageTypeID1( const char *data ) const;
};
short BinarySerializer::getMessageTypeID( const char *data ) const
{
short messageTypeID = 0;
std::istringstream is( data );
is >> messageTypeID;
return messageTypeID;
}
short BinarySerializer::getMessageTypeID1( const char *data ) const
{
short messageTypeID;
messageTypeID = std::accumulate( data, data + std::strlen( data ), ( short)0,
[]( short acc, char c )
{
return 10 * acc + ( c - '0' );
} );
return messageTypeID;
}
int main()
{
const char *s = "22";
std::cout << BinarySerializer().getMessageTypeID( s ) << std::endl;
std::cout << BinarySerializer().getMessageTypeID1( s ) << std::endl;
}
输出为
22
22
如果数据看起来像 "22sdfsd"
. 那么您需要添加将找到第一个非数字值的代码。
您也可以使用函数std::strtol
并检查获得的值是否在 short 类型的值范围内。
例如(不检查获得的值是否对 short 类型有效)
short BinarySerializer::getMessageTypeID( const char *data ) const
{
short messageTypeID = 0;
messageTypeID = ( short )strtol( data, nullptr, 10 );
return messageTypeID;
}
相关文章:
- 复制构造函数C++无法正确复制指针
- 如何在C++中复制指针数组的数据
- 如何编写复制构造函数来复制指针?
- 是否可以在不显式迭代每个元素的情况下深度复制指针容器?
- 复制指针,在不更改原始指针的情况下更改副本指向的内容?
- C++如何正确复制指针的容器(向量)
- 复制指针,然后调用 delete
- 是否应始终为具有原始指针成员的类中的深层复制指针定义复制构造函数
- C++复制指针
- 复制指针向量而不切片
- 如何以及何时复制指针
- 删除指向不同指针类型的复制指针是否会导致内存泄漏
- 复制指针值c++
- c++深度复制指针到带有指针值的映射
- 复制指针数组中动态创建的指针
- 如何复制指针到不完整类型- c++
- 复制指针类
- 模板中的内存分配指针和复制指针
- 写时复制指针对象
- 如何处理复制指针的释放