我正在用Ruby编写6502汇编程序.我正在寻找一种以字符串形式验证十六进制操作数的方法.我知道String对象提供了一个"十六进制"方法来返回一个数字,但这是我遇到的一个问题:
"0A".hex #=> 10 - a valid hexadecimal value
"0Z".hex #=> 0 - invalid, produces a zero
"asfd".hex #=> 10 - Why 10? I guess it reads 'a' first and stops at 's'?
Run Code Online (Sandbox Code Playgroud)
输入一堆胡言乱语,你会得到一些奇怪的结果.我需要的是首先验证该值是否为合法的十六进制字符串的方法.
我正在玩正则表达式,并意识到我可以这样做:
true if "0A" =~ /[A-Fa-f0-9]/
#=> true
true if "0Z" =~ /[A-Fa-f0-9]/
#=> true <-- PROBLEM
Run Code Online (Sandbox Code Playgroud)
我不知道如何解决这个问题.我需要能够验证字母只是AF,如果它只是数字也可以.
我希望避免意大利面条代码,充斥着"如果"的陈述.我希望有人可以提供"单行"或某种形式的elegent代码.
谢谢!
我正在使用从 JSON 文件导入的 javascript 对象构建 HTML 表单。我使用递归算法来构建 HTML 表,以及相应的元素(标签、文本框等)。这些字段加载了当前节点的值。
这个想法是编辑文本框中的值;这又会更新 javascript 对象。进行更改后,编辑器会将 JSON 对象发送到服务器并更新文件。
令人费解的问题是,如何引用已更改的节点?我尝试了几种方法都无济于事。
编辑:
这是我正在做的事情的基本想法:
function build_tree(obj, depth) {
for (key in obj) {
if (typeof(obj[key]) == 'object') {
print(key + "<input type="text" value='" + obj[key] + "'>");
build_tree(obj[key], depth + 1);
} else
print(key + "<input type="text" value='" + obj[key] + "'>");
}
Run Code Online (Sandbox Code Playgroud)
现在,如何将 obj[key] 的值绑定到文本框,以便在更改值时更新 Javascript 对象?
我遇到了Javascript对象文字的问题.
我想在其中一个函数中引用该对象:
var Obj = {
name : "Johnny",
dumb : function() {
alert(this.name);
}
}
Run Code Online (Sandbox Code Playgroud)
可悲的是,"哑"功能也是一个对象.因此,由于dumb()没有'name'属性,因此它将返回undefined.
我该如何解决这个问题?
我试图了解6502组装中的控制流程。
说我有以下代码:
ControlFlow:
lda mem
cmp #1
bne .sub_one
cmp #2
bne .sub_two
.sub_one:
; sub routine one goes here
jmp .done ; <-------------- without this jmp, .sub_two will execute
.sub_two:
; sub routine two goes here
.done:
rts
Run Code Online (Sandbox Code Playgroud)
就个人而言,我很喜欢switch语句或其他控制流结构。上面的JMP也与我有关。似乎有一种更好的方法来处理多种情况,而无需使用此类意大利面条式代码。
所以,我试图了解 PNG 到 BMP 转换实际上是如何发生的。我使用在线工具创建了以下 8x8 像素 PNG:
然后我在 OSX 终端中使用 ImageMagik 工具执行转换:
$ convert -monochrome pic.png pic.bmp
之后,我对图像进行了十六进制转储:
$ hexdump -C pic.bmp
00000000 42 4d 4a 01 00 00 00 00 00 00 8a 00 00 00 7c 00 |BMJ...........|.|
00000010 00 00 08 00 00 00 08 00 00 00 01 00 18 00 00 00 |................|
00000020 00 00 c0 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 …
仍然是6502装配中按位操作的新手.我想有一个有8个标志的字节.这将存储我的元精灵的状态.
我希望能够在不改变其他标志的情况下设置特定标志.
我知道如何使用ORA将它们设置为一个:
lda status
ora #%00000001 ; set bit 0 to true
sta status
Run Code Online (Sandbox Code Playgroud)
我知道如何使用EOR来切换它们:
lda status
eor #%00000001 ; if bit 0 = true, then bit 0 = false and vise versa
sta status
Run Code Online (Sandbox Code Playgroud)
最后,我知道如何判断一下是否属实:
lda status
and #%00000001 ; if bit 0 = true then set overflow flag to true
Run Code Online (Sandbox Code Playgroud)
但是如何将特定标志设置为0,而不更改任何其他标志?即使我使用了AND,我如何强制它将所需的位设置为0?
谢谢,我确定我错过了一些简单的东西.