1 Star 0 Fork 0

淘金小子/jsonlab

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
decodevarname.m 2.57 KB
一键复制 编辑 原始数据 按行查看 历史
function newname = decodevarname(name, varargin)
%
% newname = decodevarname(name)
%
% Decode a hex-encoded variable name (from encodevarname) and restore
% its original form
%
% This function is sensitive to the default charset
% settings in MATLAB, please call feature('DefaultCharacterSet','utf8')
% to set the encoding to UTF-8 before calling this function.
%
% author: Qianqian Fang (q.fang <at> neu.edu)
%
% input:
% name: a string output from encodevarname, which converts the leading non-ascii
% letter into "x0xHH_" and non-ascii letters into "_0xHH_"
% format, where hex key HH stores the ascii (or Unicode) value
% of the character.
%
% output:
% newname: the restored original string
%
% example:
% decodevarname('x0x5F_a') % returns _a
% decodevarname('a_') % returns a_ as it is a valid variable name
% decodevarname('x0xE58F98__0xE9878F_') % returns '变量'
%
% this file is part of EasyH5 Toolbox: https://github.com/NeuroJSON/easyh5
%
% License: GPLv3 or 3-clause BSD license, see https://github.com/NeuroJSON/easyh5 for details
%
newname = name;
isunpack = 1;
if (nargin == 2 && ~isstruct(varargin{1}))
isunpack = varargin{1};
elseif (nargin > 1)
isunpack = jsonopt('UnpackHex', 1, varargin{:});
end
if (isunpack)
if (isempty(strfind(name, '0x')) || isempty(regexp(name, '0x([0-9a-fA-F]+)_', 'once')))
return
end
if (exist('native2unicode', 'builtin'))
h2u = @hex2unicode;
newname = regexprep(name, '(^x|_){1}0x([0-9a-fA-F]+)_', '${h2u($2)}');
else
if (isunpack && strcmp(name, 'x0x0_'))
newname = '';
return
end
pos = regexp(name, '(^x|_){1}0x([0-9a-fA-F]+)_', 'start');
pend = regexp(name, '(^x|_){1}0x([0-9a-fA-F]+)_', 'end');
if (isempty(pos))
return
end
str0 = name;
pos0 = [0 pend(:)' length(name)];
newname = '';
for i = 1:length(pos)
newname = [newname str0(pos0(i) + 1:pos(i) - 1) char(hex2dec(str0(pos(i) + 3:pend(i) - 1)))];
end
if (pos(end) ~= length(name))
newname = [newname str0(pos0(end - 1) + 1:pos0(end))];
end
end
end
% --------------------------------------------------------------------------
function str = hex2unicode(hexstr)
val = hex2dec(hexstr);
id = histc(val, [0 2^8 2^16 2^32 2^64]);
type = {'uint8', 'uint16', 'uint32', 'uint64'};
bytes = typecast(cast(val, type{id ~= 0}), 'uint8');
str = native2unicode(fliplr(bytes(:, 1:find(bytes, 1, 'last'))));
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/quehanwei/jsonlab.git
git@gitee.com:quehanwei/jsonlab.git
quehanwei
jsonlab
jsonlab
master

搜索帮助