将Char数组中的元素复制到short中
Copying element of Char array into short
哪是最好的方式来复制字符数组元素到短?
假设有-
char arr[5] = {'1','2','3','4','5'};
unsigned short *value = 0;
1) *value = (unsigned short*) arr[4];
2) *value = *((unsigned short *) ((void *) &arr[4]));
unsigned short temp;
memcpy( &temp, &arr[4], sizeof( temp) );
*value = temp;`
2和3将从数组中复制2个字节,这将导致您从char数组末尾的未知内存中复制。
在1中,你将一个指针从一个值转换到未知区域。
你应该做的是:
*value = (unsigned short) arr[4];
即:您将char值转换为unsigned short,然后将其复制到值指向的任何地方(希望它是一个有效的指针)
编辑:你的指针的值是0…所以应该是:
unsigned short value = (unsigned short) arr[4];
实际上这是未定义的行为,因为您正在将Char转换为Short并且不确定将在word中存储的第一个字节是什么。方法也将取决于端序术语。
正确的代码应该是
char arr[5] = {'1','2','3','4','5'};
unsigned short *value = new unsigned short( arr[4] );
或
char arr[5] = {'1','2','3','4','5'};
unsigned short *value = new unsigned short;
*value = arr[4];
考虑到类型char
在您的系统中可以表现为signed char
。所以在一般情况下,也许你需要下面的
char arr[5] = {'1','2','3','4','5'};
unsigned short *value = new unsigned short( ( unsigned char )arr[4] );
虽然在您的示例中'5'是一个正值,并且这两个代码片段之间没有区别。
如果你想在unsigned short类型的对象中存储值5而不是'5',那么你应该写
char arr[5] = {'1','2','3','4','5'};
unsigned short *value = new unsigned short( arr[4] - '0' );
或
char arr[5] = {'1','2','3','4','5'};
unsigned short *value = new unsigned short;
*value = arr[4] - '0';
这似乎是一个随机猜测的列表。
value = &temp;
*value = arr[4];
相关文章:
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 使用strcpy将char数组的元素复制到另一个数组
- 是否可以初始化不可复制类型的成员变量(或基类)
- 为什么在C++中使用私有复制构造函数与删除复制构造函数
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 复制列表初始化的隐式转换的等级是多少
- 'short int'持有的值溢出,但"自动"不会溢出?
- 当从函数参数中的临时值调用复制构造函数时
- 有可能在Armadillo中复制MATLAB circshift方法吗
- 复制几乎为空的数组的最快方法
- 以下示例中如何避免代码复制?C++/库达
- 如果有一个模板构造函数只有一个泛型参数,为什么我必须有一个复制构造函数
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 当有分配器意识的容器被复制/移动时,反弹分配器是否被复制/移走
- 为什么复制而不是移动数据元素?
- 文件系统:复制功能的速度秘诀是什么
- 将Char数组中的元素复制到short中
- 使用std::copy将char数组中的两个字节复制到无符号short中