代码之家  ›  专栏  ›  技术社区  ›  adrianmcmenamin

将as.hexmode与R一起使用

hex r
  •  -2
  • adrianmcmenamin  · 技术社区  · 11 年前

    我有一些R代码:

     writePoint <- page * 2^12 + offset
     localCount<-0
     instructions <- 0
     while(localCount < lengthI$length) {
        cat("<instruction address=\"")
        cat(as.hexmode(writePoint))
    

    然而 writePoint 始终写为十进制数。我做错了什么?

    1 回复  |  直到 11 年前
        1
  •  2
  •   IRTFM    11 年前

    这有点有趣。这里有一个更紧凑的演示,并开始解释:

    > cat(as.hexmode(10))
    10
    > cat(as.hexmode(20))
    20
    > as.hexmode(20)
    [1] "14"
    
    > str(as.hexmode(20))
    Class 'hexmode'  int 20
    

    因此,十六进制数字有一种打印方法(通过键入 methods(print) 在控制台上),并在打印时将其强制为一个字符,但它并没有真正将其内部表示形式更改为数字,因此 cat 给你一个十进制数。请注意,的帮助页 说(但我承认这段文字并没有真正暗示这种行为,我会认为这意味着猫会给出14或0x14):

    > 0x14
    [1] 20
    

    cat以与打印相同的方式转换数字/复杂元素(而不是以与S等效字符使用的.character相同的方式),因此选项“digits”和“scipen”是相关的。

    可能需要使用as.character强制来获得所需内容:

    >  as.character(as.hexmode(20))
    [1] "14"