windows下使用aspera_vlc windows

windows下使用aspera_vlc windows资源下载官网资源:https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz环境配置编译环境:Win764位系统VS2015创建一个VS2015项目,应用程序类型使用静态库,注意取消勾选“使用预编译头”;将资源[libiconv-1.16\lib]文件夹下的所有文件,全部复制到第一步创建的工程目录下,并找到config.h….

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

资源下载

官网资源: https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz
CSDN资源:https://download.csdn.net/download/hhhuang1991/11979866
VS2015配置项目+测试代码

环境配置

编译环境:Win7 64位系统 VS2015

  1. 创建一个VS2015项目,应用程序类型使用静态库,注意取消勾选“使用预编译头”;
  2. 将资源[libiconv-1.16\lib]文件夹下的所有文件,全部复制到第一步创建的工程目录下,并找到config.h.in文件,将后缀.in去掉;
  3. 将资源[libiconv-1.16\include]文件夹下的iconv.h.in,复制到工程目录下,并将后缀.in去掉;
  4. 将资源[libiconv-1.16\libcharset\lib]文件夹下的localcharset.c,复制到工程目录下;
  5. 将资源[libiconv-1.16\libcharset\include]文件夹下的localcharset.h.in,复制到工程目录下,并将后缀.in去掉;
  6. 将资源[libiconv-1.16\include]文件夹下的iconv.h.in,复制到工程目录下,并将后缀.in去掉;
  7. iconv.clocalcharset.c文件加载到工程中;
  8. 直接编译工程。

异常排除

  1. iconv.c文件中#include <config.h>改为#include "iconv.h"
    localcharset.c文件中#include <config.h>改为#include "config.h"
 fatal error C1083: 无法打开包括文件: “config.h”: No such file or directory
 fatal error C1083: 无法打开包括文件: “iconv.h”: No such file or directory

Jetbrains全家桶1年46,售后保障稳定

  1. 找到iconv.h文件中,所有带@符号的字符串都要去掉@或屏蔽:
Line21,@DLL_VARIABLE@改为/*@DLL_VARIABLE@*/
Line82,@ICONV_CONST@改为const
Line100, @USE_MBSTATE_T@改为USE_MBSTATE_T
Line101,@BROKEN_WCHAR_H@改为BROKEN_WCHAR_H
Line121, @USE_MBSTATE_T@改为 USE_MBSTATE_T
Line168,@HAVE_WCHAR_T@改为HAVE_WCHAR_T
  1. 找到localcharset.c文件中的sprintf函数,全部替换成安全类型的函数sprintf_s

Demo

  1. 编译上面工程,将会生成静态库libiconv.lib。
  2. 创建一个测试工程。将iconv.h和库文件libiconv.lib拷贝到测试工程目录下,测试代码如下,
#include "stdafx.h" 
#include "..\libiconv\iconv.h"
#pragma comment(lib, "..\\Debug\\libiconv.lib")
#include <iostream>
using namespace std;
int main()
{ 

// 将GBK编码的字串,转成UTF-8编码的字
iconv_t cd = iconv_open("UTF-8", "GBK"); 
if ((iconv_t)-1 == cd)  
{ 

if (EINVAL == errno)
{ 

cerr << "The conversion from fromcode to tocode is not supported by the implementation" << endl;
}
else { 

cerr << "iconv_open fail!" << endl;
}
return -1;
}
// 将转换描述符cd中的转换状态恢复成初始化状态,方法是iconv中的inbuff参数设置成NULL
iconv(cd, NULL, NULL, NULL, NULL);
// 将GBK编码的"啊"转成UTF-8编码
char * inbuff = new char[64];
memset(inbuff, 0, sizeof inbuff);
char *outbuff = new char[64];
memset(outbuff, 0, sizeof outbuff);
// "啊"的GBK编码为0xB0A1,UTF-8编码为0xE2 0x80 0x9C
inbuff[0] = 0xA1;
inbuff[1] = 0xB0;
char * inptr = inbuff;   // 为什么要设置这个中间指针inptr,而不支持采用 inbuff?因为iconv会改变指针inbuff的值,这样在删除内存时delete[] inbuff,将会出错
size_t insize = 2;
char * outptr = outbuff;  // 作用与inptr类似
size_t outsize = 64;
char *save = new char[64];
memset(save, 0, sizeof save);
size_t outsave = 0;
// 资料介绍,iconv每次只转换一个多字节字符。但是经过测试,只要内容是正常,都是一次转换完,不明白其中缘由。
size_t ret = iconv(cd, (const char **)&inptr, &insize, &outptr, &outsize);
if ((size_t)-1 == ret) { 

if (E2BIG == errno) { 

cerr << "There is not sufficient room at *outbuf." << endl;
}
else if (EILSEQ == errno) { 

cerr << "An invalid multibyte sequence has been encountered in the input." << endl;
}
else if (EINVAL == errno) { 

cerr << "An incomplete multibyte sequence has been encountered in the input." << endl;
}
goto TestFinished;
}
else { 

outsave = 64 - outsize;
memcpy(save, outptr - outsave, outsave);   // 此处采用memcpy而不采用strcpy的目的是,当ACSII类型字符转换到UCS2类型时,会产生0x00的字符,使用strcpy复制会在此处截断,导致内容丢失
}
cout << "successed." << endl;
TestFinished:
delete[] inbuff;
delete[] outbuff;
delete[] save;
iconv_close(cd);
getchar();
return 0;
}

参考资源

iconv_open
iconv

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:http://www.javaforall.cn/234978.html原文链接:http://www.javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Eclipse代码自动补全方法「建议收藏」

    Eclipse代码自动补全方法「建议收藏」MyEclipse,是在eclipse基础上加上自己的插件开发而成的功能强大的企业级集成开发环境,主要用于Java、JavaEE以及移动应用的开发;以下小编给大家介绍在使用MyEclipse开发编写代码中代码提示的快捷方式;代码的提示大大给开发者带来高效的编程及代码书写的准确率等。详细步骤如下:1、找到Window下的Preferences里面的Java-Editor-Templates路径…

  • 相关性分析方法怎么选择_多个因素相关性分析

    相关性分析方法怎么选择_多个因素相关性分析有时候我们根据需要要研究数据集中某些属性和指定属性的相关性,显然我们可以使用一般的统计学方法解决这个问题,下面简单介绍两种相关性分析方法,不细说具体的方法的过程和原理,只是简单的做个介绍,由于理解可能

  • iptable 链表「建议收藏」

    iptable 链表「建议收藏」iptable五链4表PREROUTING的规则可以存在于:raw表,mangle表,nat表。INPUT的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。FORWARD的规则可以存在于:mangle表,filter表。OUTPUT的规则可以存在于:raw表mangle表,nat表,filter表。POSTROUTING的规则可以存在于:mangle表,n

  • 卸载软件包命令_查看rpm包是否安装

    卸载软件包命令_查看rpm包是否安装可以先用rpm-q’xxx’或者rpm-qf’xxx/bin/xxxx.xx’来查询一下所属的rpm包的名字。然后用rpm-e’xxxxxx’来删之。’xxx/bin/xxxx.xx’是一个包中任意的文件’xxxxxx’是查询得到的rpm包的名称    rpm-e的时候后面的文件名不用加版本号 安全地卸载RPM卸载软件包,并不是简单地将原来安

  • MybatisCodeHelperPro永久激活码2022_最新在线免费激活

    (MybatisCodeHelperPro永久激活码2022)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

  • wptx64能卸载吗_Win10自带应用卸载教程(本人亲测)

    wptx64能卸载吗_Win10自带应用卸载教程(本人亲测)使用win10有一段时间了,其中也用过诸如腾讯电脑管家、软媒魔方等工具对开机启动项进行过优化,多数时候都没出现问题,但最近几次优化使系统出现了各种问题。现在来总结一下,win10的那些服务项目不能动,不能禁止开机启动,不能关闭后台驻留。CoreMessaging:重要进程,关键系统进程,禁用后无法进入系统,ctrl+alt+del键都无效;TaskScheduler:windows系统任务调度程序…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号