想将 first转为char*但是又不想将它转为char* 的ASCII表示,想以内存原样转过去。
是不是有哪些内存复制的方法可以实现的呢?

 
  
  1. class data{  
  2. private:  
  3.    DWORD first;  
  4.    char * second;  
  5.    char * combine;  
  6. public:  
  7.    void combineBoth();   // combineBoth()里面实现的是 combine = first + second 的数据。  
  8.    void separateEither();  // separateEither()里面实现的是 first = combine(0~3), second = combine(4~n);  
  9. };  

实际上就是想将内存地址获取一下,最好是能combine的内存地址的下几个位置就到了second的内存地址中去了。

 

解决问题的源代码:

 
  
  1. #include <iostream>  
  2. #include <Windows.h>  
  3. #include <string.h>  
  4. using namespace std;  
  5.  
  6. class data  
  7. {  
  8. public:  
  9.    DWORD first;     // 四个字节  
  10.    char * second;  
  11.    char * combine;  
  12.    char * getSecond;  
  13. public:  
  14.    data();  
  15.    void combineBoth();   // combineBoth()里面实现的是 combine = first + second 的数据。  
  16.    void separateEither();  // separateEither()里面实现的是 first = combine(0~3), second = combine(4~n);  
  17.    void displayAllData();  
  18. };  
  19.  
  20. data::data(){  
  21.     first = 987654321;  
  22.     second = new char[10];  
  23.     combine = new char[14];  
  24.     getSecond = combine + 4;  
  25.     const char * temp = "abcdefghi";    // 这里会有结束符9+1个字符  
  26.     strcpy(second, temp);  
  27. }  
  28.  
  29. void data::combineBoth(){  
  30.     memcpy( (void*)combine, (void *) &first, 4);  
  31.     memcpy( (void*)(combine+4), (void*)second, 10);  
  32. }  
  33.  
  34. void data::separateEither(){  
  35.     memcpy( (void *) &first, (void*)combine,  4);  
  36.     memcpy( (void*)second, (void*)(combine+4),  10);  
  37. }  
  38.  
  39. void data::displayAllData()  
  40. {   cout << "first:" << first << endl;  
  41.     cout << "second:" << second << endl;  
  42.     cout << "combine:";  
  43.     for (int i = 0; i < 14; ++i){  
  44.         cout << *(char*)(combine+i);  
  45.     }  
  46.     cout << endl;  
  47.     cout << "getSecond:" << getSecond << endl;  
  48. }  
  49.  
  50.  
  51. int main(){  
  52.     cout << "初始化\n";  
  53.     data * myData = new data();  
  54.     myData -> displayAllData();  
  55.  
  56.     cout << "\n合并\n";  
  57.     myData -> combineBoth();  
  58.     myData -> displayAllData();  
  59.  
  60.     cout << "\n分解\n";  
  61.     myData->first = 0;  
  62.     myData -> separateEither();  
  63.     myData -> displayAllData();  
  64.  
  65.     system("pause");  
  66.     return 0;  
  67. }  
  68.  

运行结果:

初始化

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