user-0 提问: 读取到内存中的数据后如何转换成字符串

回复:
user: user-0
content: 引用 13 楼 zhao4zhong1 的回复:谁告诉你二进制数据中除了单字节ASCII码和UnicodeASCII码外其余的必然不是多字节GBK汉字就是Unicode汉字来着？  对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。 虽然最后没有实际的解决 但还是谢谢你了  这次我又学到一些东西了

user: user-0
content: 引用 9 楼 zhao4zhong1 的回复:%c和%C不是一回事！  printf Type Field Characters The type character is the only required format field ; it appears after any optional format fields. The type character determines whether the associated argument is interpreted as a character, string, or number. The types C and S, and the behavior of  c and s with printf functions, are Microsoft extensions and are not ANSI-compatible.   Table R.3   printf Type Field Characters  Character Type Output Format  %c int or wint_t When used with printf functions, specifies a single-byte character; when used with wprintf functions, specifies a wide character.  %C int or wint_t When used with printf functions, specifies a wide character; when used with wprintf functions, specifies a single-byte character. 传好了 你有时间看看

user: user-0
content: 引用 7 楼 user-3 的回复:一看你这个注册表项, 就知道它就是一个字符串, 并且应该是UNICODE的.  对于UNICODE, 请使用wprintf 没用过 求个事例  数据在内存中

user: user-0
content: 改成%C 也无法正确显示汉字

user: user-1
content: 谁告诉你二进制数据中除了单字节ASCII码和UnicodeASCII码外其余的必然不是多字节GBK汉字就是Unicode汉字来着？  对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A  电脑内存或文件内容只是一个一维二进制字节数组及其对应的二进制地址； 人脑才将电脑内存或文件内容中的这个一维二进制字节数组及其对应的二进制地址的某些部分看成是整数、有符号数/无符号数、浮点数、复数、英文字母、阿拉伯数字、中文/韩文/法文……字符/字符串、汇编指令、函数、函数参数、堆、栈、数组、指针、数组指针、指针数组、数组的数组、指针的指针、二维数组、字符点阵、字符笔画的坐标、黑白二值图片、灰度图片、彩色图片、录音、视频、指纹信息、身份证信息……  推荐使用WinHex软件查看硬盘或文件或内存中的原始字节内容。

user: user-0
content: 引用 4 楼 zhao4zhong1 的回复:%c和%C不是一回事！  printf Type Field Characters The type character is the only required format field ; it appears after any optional format fields. The type character determines whether the associated argument is interpreted as a character, string, or number. The types C and S, and the behavior of  c and s with printf functions, are Microsoft extensions and are not ANSI-compatible.   Table R.3   printf Type Field Characters  Character Type Output Format  %c int or wint_t When used with printf functions, specifies a single-byte character; when used with wprintf functions, specifies a wide character.  %C int or wint_t When used with printf functions, specifies a wide character; when used with wprintf functions, specifies a single-byte character.   关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习” - - 搞的我都不好意思问你了   但是汉字还是无法正确显示  这表项用来保存WIN7任务栏 固定的快捷方式  如果你有环境请在帮我看看 跪谢!!!

user: user-1
content: %c和%C不是一回事！  printf Type Field Characters The type character is the only required format field ; it appears after any optional format fields. The type character determines whether the associated argument is interpreted as a character, string, or number. The types C and S, and the behavior of  c and s with printf functions, are Microsoft extensions and are not ANSI-compatible.   Table R.3   printf Type Field Characters  Character Type Output Format  %c int or wint_t When used with printf functions, specifies a single-byte character; when used with wprintf functions, specifies a wide character.  %C int or wint_t When used with printf functions, specifies a wide character; when used with wprintf functions, specifies a single-byte character.

user: user-2
content: #include <locale.h> int main() {     long Open,Read,Type,length,i=0;     BYTE *nr;     char *jg,*ar;     HKEY Handle;     setlocale(LC_ALL,"chs");     Open=RegOpenKeyEx(HKEY_CURRENT_USER,         "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Taskband",         0,         KEY_ALL_ACCESS,&Handle);     if(Open==ERROR_SUCCESS && Handle!=0)//判断是否成功打开     {         Read=RegQueryValueEx(Handle,TEXT("Favorites"),0,&Type,NULL,&length);//查询字符串所占用的字符数 and DataType         if(Read==ERROR_SUCCESS && length!=0)//判断查询长度         {             printf("所需要的长度:%d \n",length);             MessageBox(NULL,"获取长度成功","信息:",0);             nr=(BYTE *)malloc(length+4 );//分配内存成功 4952             printf("内存块大小:%d \n",sizeof(BYTE)*length);             Read=RegQueryValueEx(Handle,TEXT("Favorites"),0,NULL,(LPBYTE)nr,&length);//读取表项 类型为REG_BINARY             printf("查询结果:%d \n",Read);             printf("length==%d\n",length);             while(i<length)             {                 printf("%C",*(wchar_t *)(nr+i));                 i+=2;             }             printf("\n");             free(nr);//释放内存*/             nr=NULL;         }         else         {             MessageBox(NULL,"失败","信息:",0);             printf("%d \n",Read);                       }         RegCloseKey(Handle);         return 0;     }     RegCloseKey(Handle);     MessageBox(NULL,"打开表项失败","信息:",0);     return 0; }

user: user-3
content: 一看你这个注册表项, 就知道它就是一个字符串, 并且应该是UNICODE的.  对于UNICODE, 请使用wprintf

user: user-1
content: 你把%c改为%C后运行的截图发出来。  对电脑而言没有乱码，只有二进制字节；对人脑才有乱码。啊 GBK:0xB0 0xA1,Unicode-16 LE:0x4A 0x55,Unicode-16 BE:0x55 0x4A,UTF-8:0xE5 0x95 0x8A

user: user-1
content: %c和%C不是一回事！  printf Type Field Characters The type character is the only required format field ; it appears after any optional format fields. The type character determines whether the associated argument is interpreted as a character, string, or number. The types C and S, and the behavior of  c and s with printf functions, are Microsoft extensions and are not ANSI-compatible.   Table R.3   printf Type Field Characters  Character Type Output Format  %c int or wint_t When used with printf functions, specifies a single-byte character; when used with wprintf functions, specifies a wide character.  %C int or wint_t When used with printf functions, specifies a wide character; when used with wprintf functions, specifies a single-byte character.   关于自己是否适合编程的很简单的测试： 在报纸或杂志上随便找一段约1000字的文章，在Word中输入一遍。输完后再参考下面答案：  A里面有10处以上文字或标点错误 B里面没有文字或标点错误并敢为此跟人打赌 C里面没有文字或标点错误并且字体和排版完全与原稿一致 D打印在半透明的纸上和原稿重叠在一起检查一模一样，且自我感觉很有成就感  A不适合编程（理由：打字准确度偏低、粗心大意） B初级程序员（理由：打字准确度很高、认真细致、自信、理解全角半角概念） C高级程序员（理由：在B的基础上理解字体和排版也是电脑打印的重要因素、但相比D还不够偏执、精益求精、结果可验证） D软件项目经理（理由：能针对项目给出令人信服的细致到极点的需求说明和典型测试用例。用户几乎挑不出毛病。专业！）  如果想从A变成B的话，到我的资源http://download.csdn.net/detail/zhao4zhong1/4084259里面下载“适合程序员的键盘练习”

user: user-0
content: 不好意思 我仔细看你给出的代码 - -   我试过了 比之前好很多 就是汉字怎么输出啊?   哎 关于数据方面的知识不知道到哪看好

user: user-0
content: 引用 1 楼 zhao4zhong1 的回复:#include <locale.h> int main() {     long Open,Read,Type,length,i=0;     BYTE *nr;     char *jg,*ar;     HKEY Handle;     setlocale(LC_ALL,"chs");     Open=RegOpenKeyEx(HKEY_CURRENT_USER,         "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Taskband",         0,         KEY_ALL_ACCESS,&Handle);     if(Open==ERROR_SUCCESS && Handle!=0)//判断是否成功打开     {         Read=RegQueryValueEx(Handle,TEXT("Favorites"),0,&Type,NULL,&length);//查询字符串所占用的字符数 and DataType         if(Read==ERROR_SUCCESS && length!=0)//判断查询长度         {             printf("所需要的长度:%d \n",length);             MessageBox(NULL,"获取长度成功","信息:",0);             nr=(BYTE *)malloc(length+4 );//分配内存成功 4952             printf("内存块大小:%d \n",sizeof(BYTE)*length);             Read=RegQueryValueEx(Handle,TEXT("Favorites"),0,NULL,(LPBYTE)nr,&length);//读取表项 类型为REG_BINARY             printf("查询结果:%d \n",Read);             printf("length==%d\n",length);             while(i<length)             {                 printf("%C",*(wchar_t *)(nr+i));                 i+=2;             }             printf("\n");             free(nr);//释放内存*/             nr=NULL;         }         else         {             MessageBox(NULL,"失败","信息:",0);             printf("%d \n",Read);                      }         RegCloseKey(Handle);         return 0;     }     RegCloseKey(Handle);     MessageBox(NULL,"打开表项失败","信息:",0);     return 0; }    数据中保存的是文件的路径 但路径中有汉字  并不能输出显示出来 这个要怎么解决啊??

user: user-1
content: #include <locale.h> int main() {     long Open,Read,Type,length,i=0;     BYTE *nr;     char *jg,*ar;     HKEY Handle;     setlocale(LC_ALL,"chs");     Open=RegOpenKeyEx(HKEY_CURRENT_USER,         "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Taskband",         0,         KEY_ALL_ACCESS,&Handle);     if(Open==ERROR_SUCCESS && Handle!=0)//判断是否成功打开     {         Read=RegQueryValueEx(Handle,TEXT("Favorites"),0,&Type,NULL,&length);//查询字符串所占用的字符数 and DataType         if(Read==ERROR_SUCCESS && length!=0)//判断查询长度         {             printf("所需要的长度:%d \n",length);             MessageBox(NULL,"获取长度成功","信息:",0);             nr=(BYTE *)malloc(length+4 );//分配内存成功 4952             printf("内存块大小:%d \n",sizeof(BYTE)*length);             Read=RegQueryValueEx(Handle,TEXT("Favorites"),0,NULL,(LPBYTE)nr,&length);//读取表项 类型为REG_BINARY             printf("查询结果:%d \n",Read);             printf("length==%d\n",length);             while(i<length)             {                 printf("%C",*(wchar_t *)(nr+i));                 i+=2;             }             printf("\n");             free(nr);//释放内存*/             nr=NULL;         }         else         {             MessageBox(NULL,"失败","信息:",0);             printf("%d \n",Read);                      }         RegCloseKey(Handle);         return 0;     }     RegCloseKey(Handle);     MessageBox(NULL,"打开表项失败","信息:",0);     return 0; }