none
几个和字符串有关的问题 RRS feed

  • 问题

  • 1.用了@在插入时位置和不用时相同吗
    int i=0;
    string s1="d:\\w.txt";//我想把i插到w之后
    string s2=@"d:\w.txt";//我想把i插到w之后

    2.转义可以内插吗?
    int u=0x33a9;
    Console.Write($"\x{u:x}");//行吗?
    统一码在2字节以外的,有的地方用5位HEX,有的地方用4BYTE,反正Encoding.Unicode.GetBytes都是4BYTE,能告诉我这两种有没有公式可以互相转换?
    2019年2月3日 7:54

答案

  • 再说说我代指的两种表示法,比如"𠂤"

    string s1="𠂤";
    byte[]u=Encoding.BigEndianUnicode.GetBytes(s1);
    foreach(byte i in u){
        Console.Write("{0:X}  ",i);}

    返回D8   40    DC   A4这就是4BYTE表示法

    而在Unicode Map中的编码是U+200A4这种表示法就是5位HEX表示法

    • 已标记为答案 czhch 2019年2月6日 7:58
    2019年2月6日 1:22
  • 我已经求得公式,不过可能要分类讨论。在最高位第5位是1时,4B前3个相加再往高移2位也就是×100再加上最低的那个字节就相等了。但最高位第5位是2则不成立。

    上图很好地说明了UTF-16的转换方法,你可以参考一下。

    • 已标记为答案 czhch 2019年2月6日 23:58
    2019年2月6日 11:43

全部回复

  • 统一码在2字节以外的字符归于扩展统一码范围,如CJK Unified Ideographs Extension B、C、D、E等;

    这些字符用HEX方式表示为五位,用2字节方式表示为4BYTE;

    Encoding.Unicode.GetBytes方法一般只能取2字节的字符,超出2字节的字符只能扩展成4字节;

    他们之间相互转换应该可以,但需要把具体的实例拿出来进行分析一下。

    2019年2月3日 8:52
  • 我已经求得公式,不过可能要分类讨论。在最高位第5位是1时,4B前3个相加再往高移2位也就是×100再加上最低的那个字节就相等了。但最高位第5位是2则不成立。
    • 已编辑 czhch 2019年2月4日 2:12
    • 已标记为答案 czhch 2019年2月4日 2:12
    • 取消答案标记 czhch 2019年2月5日 2:08
    2019年2月4日 1:52
  • 你好,

    欢迎来到MSDN 论坛。

    >>1.用了@在插入时位置和不用时相同吗

    如果你想在字符串中将i插入到w之后, 你可以参考以下代码。在这两行代码中,@符号没有影响。

    int i = 0;
                string s1 = "d:\\w" + i + ".txt";//我想把i插到w之后
                string s2 = @"d:\w" + i + ".txt";//我想把i插到w之后

    关于更多@符号的使用,你可以参考MSDN的文档。

    https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/lexical-structure#identifiers

    >>intu=0x33a9;Console.Write($"\x{u:x}");//行吗?

    如果你想要在转义字符中插入u,你可以参考下方代码。

    int u = 0x33a9;
                Console.Write($@"\x{"+u+":x}");//行吗?

    或者

     int u = 0x33a9;
                Console.Write($"\\x{"+u+":x}");//行吗?

    在这里,@符号的使用,可以在双引号之前使用单斜杠。

    >>统一码在2字节以外的,有的地方用5位HEX,有的地方用4BYTE,反正Encoding.Unicode.GetBytes都是4BYTE,能告诉我这两种有没有公式可以互相转换?

    我不太理解这边的两种相互转化的意思。你指的是哪两种之间的转化?

    Best Regards,

    Wendy


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2019年2月5日 5:08
    版主
  • 第2题我要的是字符的模样就是输出这个字符,而不是要知道字符的值
    2019年2月5日 11:17
  • 再说说我代指的两种表示法,比如"𠂤"

    string s1="𠂤";
    byte[]u=Encoding.BigEndianUnicode.GetBytes(s1);
    foreach(byte i in u){
        Console.Write("{0:X}  ",i);}

    返回D8   40    DC   A4这就是4BYTE表示法

    而在Unicode Map中的编码是U+200A4这种表示法就是5位HEX表示法

    • 已标记为答案 czhch 2019年2月6日 7:58
    2019年2月6日 1:22
  • 你好,

    我不知道你是如何使用5位HEX表示法的。

    根据我的搜索以及测试, 我没有找到完全适用的转换方式。但最简单的方式就是使用一个字符串的中间变量。

    Best Regards,

    Wendy


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2019年2月6日 3:54
    版主
  • 我已经求得公式,不过可能要分类讨论。在最高位第5位是1时,4B前3个相加再往高移2位也就是×100再加上最低的那个字节就相等了。但最高位第5位是2则不成立。

    上图很好地说明了UTF-16的转换方法,你可以参考一下。

    • 已标记为答案 czhch 2019年2月6日 23:58
    2019年2月6日 11:43