Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在vim中将十六进制字符串转换/粘贴为字节列表?_C++_Vim_Bytearray - Fatal编程技术网

C++ 如何在vim中将十六进制字符串转换/粘贴为字节列表?

C++ 如何在vim中将十六进制字符串转换/粘贴为字节列表?,c++,vim,bytearray,C++,Vim,Bytearray,假设我们有一个相当长的十六进制字符串: 112233..ddeeff 我想用这个字符串初始化一个容器,即C++中的STD::vector。 vim中是否有办法将其粘贴为以下形式的字节列表: 0x11, 0x22, 0x33 ... 0xdd, 0xee, 0xff 或者,也可以将字符串粘贴为其原始十六进制字符串形式,然后使用可视选择和一些快捷方式将其快速转换为所需的字节列表形式?正则表达式: :s/\(\x\x\)/0x\1, /g 在VIM中,\x与十六进制数字匹配\(和\)表示我们在替

假设我们有一个相当长的十六进制字符串:

112233..ddeeff
<>我想用这个字符串初始化一个容器,即C++中的STD::vector。 vim中是否有办法将其粘贴为以下形式的字节列表:

0x11, 0x22, 0x33 ... 0xdd, 0xee, 0xff
或者,也可以将字符串粘贴为其原始十六进制字符串形式,然后使用可视选择和一些快捷方式将其快速转换为所需的字节列表形式?

正则表达式:

:s/\(\x\x\)/0x\1, /g

在VIM中,
\x
与十六进制数字匹配<代码>\(和
\)
表示我们在替换中使用
\1
引用的子模式。添加一个
g
颗粒,使其应用于整行。

您可以定义一个宏来转换字符串,然后将其与键关联。下面的代码通过按F2键将光标所在的单词转换为所需的字节列表

function! TransformHex2byte()
    " Get hex string, transform it, and delete the trailing ', '
    let l:new_word = substitute( substitute( expand("<cword>") , '\x\x', "0x&, " , 'g') , ', $', '', '' )

    " Change the old string with the new one.
    exec "normal ciw" . new_word . "\<Esc>"
endfunction

noremap <F2> :call TransformHex2byte()<CR>
函数!转换Hex2Byte()
获取十六进制字符串,对其进行转换,并删除尾随的“,”
设l:new_word=substitute(替换(展开(“”),\x\x',“0x&,”,“g'),',$,“”)
“用新字符串替换旧字符串。
执行“正常ciw”。新词。"\"
端功能
noremap:调用TransformHex2byte()

Yes regexp是一种方法。因为我经常需要这个命令,所以我希望每次都不必输入正则表达式。你知道如何将正则表达式绑定到快捷方式,以便粘贴“剪贴板”-注册将正则表达式应用到其中的内容吗?@norritt我不知道vim如何将其链接到粘贴。