想将 first转为char*但是又不想将它转为char* 的ASCII表示,想以内存原样转过去。
是不是有哪些内存复制的方法可以实现的呢?
- class data{
- private:
- DWORD first;
- char * second;
- char * combine;
- public:
- void combineBoth(); // combineBoth()里面实现的是 combine = first + second 的数据。
- void separateEither(); // separateEither()里面实现的是 first = combine(0~3), second = combine(4~n);
- };
实际上就是想将内存地址获取一下,最好是能combine的内存地址的下几个位置就到了second的内存地址中去了。
解决问题的源代码:
- #include <iostream>
- #include <Windows.h>
- #include <string.h>
- using namespace std;
- class data
- {
- public:
- DWORD first; // 四个字节
- char * second;
- char * combine;
- char * getSecond;
- public:
- data();
- void combineBoth(); // combineBoth()里面实现的是 combine = first + second 的数据。
- void separateEither(); // separateEither()里面实现的是 first = combine(0~3), second = combine(4~n);
- void displayAllData();
- };
- data::data(){
- first = 987654321;
- second = new char[10];
- combine = new char[14];
- getSecond = combine + 4;
- const char * temp = "abcdefghi"; // 这里会有结束符9+1个字符
- strcpy(second, temp);
- }
- void data::combineBoth(){
- memcpy( (void*)combine, (void *) &first, 4);
- memcpy( (void*)(combine+4), (void*)second, 10);
- }
- void data::separateEither(){
- memcpy( (void *) &first, (void*)combine, 4);
- memcpy( (void*)second, (void*)(combine+4), 10);
- }
- void data::displayAllData()
- { cout << "first:" << first << endl;
- cout << "second:" << second << endl;
- cout << "combine:";
- for (int i = 0; i < 14; ++i){
- cout << *(char*)(combine+i);
- }
- cout << endl;
- cout << "getSecond:" << getSecond << endl;
- }
- int main(){
- cout << "初始化\n";
- data * myData = new data();
- myData -> displayAllData();
- cout << "\n合并\n";
- myData -> combineBoth();
- myData -> displayAllData();
- cout << "\n分解\n";
- myData->first = 0;
- myData -> separateEither();
- myData -> displayAllData();
- system("pause");
- return 0;
- }
运行结果:
初始化
first:987654321
second:abcdefghi
combine:屯屯屯屯屯屯屯
getSecond:屯屯屯屯屯铪铪铪
合并
first:987654321
second:abcdefghi
combine:県?abcdefghi
getSecond:abcdefghi
分解
first:987654321
second:abcdefghi
combine:県?abcdefghi
getSecond:abcdefghi
我的提问网址:http://topic.csdn.net/u/20120908/09/bdbb6f55-58bf-4425-ae41-0f69b7963933.html?75984
转载于:https://blog.51cto.com/neicole/985025