R 如何将原始向量中的字节转换为 ascii space
R How to convert a byte in a raw vector into a ascii space
我正在阅读一些由 C 代码创建的非常古老的文件,这些文件由 header (ASCII) 和数据组成。我使用 readBin() 来获取 header 数据。当我尝试将 header 转换为字符串时失败,因为有 3 个 'bad' 字节。其中两个是二进制 0,另一个是二进制 17 (IIRC)。
如何将坏字节转换为 ASCII SPACE?
我尝试了以下代码的某些版本,但失败了。
hd[hd == as.raw(0) | hd == as.raw(0x17)] <- as.raw(32)
我想用 space 替换每个错误值,这样我就不必在解析从 hd 派生的字符串时重新计算所有固定数据位置。
我通常只是转换为整数。
假设我们有这个原始向量:
raw_with_null <- as.raw(c(0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x00,
0x57, 0x6f, 0x72, 0x6c, 0x64, 0x21))
如果我们尝试将其转换为字符,则会出现错误,因为空字节:
rawToChar(raw_with_null)
#> Error in rawToChar(raw_with_null): embedded nul in string: 'Hello[=11=]World!'
很容易转换为数字并将任何 0 或 23 替换为 32 (ascii space)
nums <- as.integer(raw_with_null)
nums[nums == 0 | nums == 23] <- 32
然后我们可以将 nums
转换回原始格式,然后再转换为字符:
rawToChar(as.raw(nums))
#> [1] "Hello World!"
由 reprex package (v2.0.1)
于 2022-03-05 创建
我正在阅读一些由 C 代码创建的非常古老的文件,这些文件由 header (ASCII) 和数据组成。我使用 readBin() 来获取 header 数据。当我尝试将 header 转换为字符串时失败,因为有 3 个 'bad' 字节。其中两个是二进制 0,另一个是二进制 17 (IIRC)。
如何将坏字节转换为 ASCII SPACE? 我尝试了以下代码的某些版本,但失败了。
hd[hd == as.raw(0) | hd == as.raw(0x17)] <- as.raw(32)
我想用 space 替换每个错误值,这样我就不必在解析从 hd 派生的字符串时重新计算所有固定数据位置。
我通常只是转换为整数。
假设我们有这个原始向量:
raw_with_null <- as.raw(c(0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x00,
0x57, 0x6f, 0x72, 0x6c, 0x64, 0x21))
如果我们尝试将其转换为字符,则会出现错误,因为空字节:
rawToChar(raw_with_null)
#> Error in rawToChar(raw_with_null): embedded nul in string: 'Hello[=11=]World!'
很容易转换为数字并将任何 0 或 23 替换为 32 (ascii space)
nums <- as.integer(raw_with_null)
nums[nums == 0 | nums == 23] <- 32
然后我们可以将 nums
转换回原始格式,然后再转换为字符:
rawToChar(as.raw(nums))
#> [1] "Hello World!"
由 reprex package (v2.0.1)
于 2022-03-05 创建