我正在尝试使用API进行消息传递。对于我的特定应用程序,我需要在使用API之前获取所有字符的USC-2值。 请告诉我们如何获取给定字符串的所有字符的USC-2值。对于我的应用程序,我将在电子表格的单元格中键入我的字符串,并希望在我键入时在另一个单元格中看到该字符串的USC-2值。
示例:如果我在一个单元格中输入“नमस्ते”,我应该在另一个单元格中输出“0928 092E 0938 094D 0924 0947”。
在excel和OfficeCalc中有一个函数“UNICODE”,它执行类似的操作,但它仅适用于字符串的第一个字符。我想将整个字符串转换为4位Unicode值。
API Link - 第6页 - 第6.2节
答案 0 :(得分:1)
没有宏的唯一解决方案是使用辅助单元。
实施例
公式:
在B1
:
=MID($A1,COLUMN(A1),1)
复制到右边,直到结果为空。
在B2
:
=DEC2HEX(UNICODE(B1),4)
复制到右边,直到出现#VALUE错误。
在B3
:
=B2
和C3
:
=B3&C2
复制到右边,直到出现#VALUE错误。
使用以下用户定义的功能(Excel VBA),可以使用
实现=ucscode(A1)
在一个单元格内。
功能:
Public Function ucscode(s As String) As String
For i = 1 To Len(s)
ucscode = ucscode & Application.Dec2Hex(AscW(Mid(s, i, 1)), 4)
Next
End Function
使用Openoffice Calc,公式解决方案与Excel相同。当然错误是Err:504而不是#VALUE。
使用starbasic的用户定义函数可以是:
Public Function ucscode(s As String) As String
Dim sresult as String
For i = 1 To Len(s)
sresult = sresult & right("0000" & hex(asc(mid(s, i,1))), 4)
Next
ucscode = sresult
End Function
答案 1 :(得分:1)
我的答案与@Axel Richter的相似:
=IF(LEN($A$1)>=ROW(),DEC2HEX(UNICODE(MID($A$1,ROW(),1)),4),"")
。=CONCATENATE(B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23,B24,B25,B26,B27,B28,B29,B30)
。现在输入要在单元格A1中转换的字符串。它最多可以使用30个字符。
请记住,在最新版本的LibreOffice(以及我认为的Excel)中,您可以按 Alt + x 查看字符的Unicode值。
当然,在Perl中这会更容易。