Your code does what you want if you pass it a character array. For example if you pass '11', you get 3 as a result. Note the single quotes. They are necessary.
Interestingly, it does not work with the new string type using double quotes. Passing "11" results in 11 (yes, 11 as a double). Totally not expected and, in my mind, a bug.
edit: actually, the reason for this is that the length of "11" is one, while the length of '11' is two. So, this is expected
As you discovered, passing a number to this doesn't work. The function calls str2double which doesn't expect a number.
When you pass the number 11 you are essentially doing str2double(11) which returns NaN.
By the way, can you explain what you mean by a "dual/binary" number? I'm not acquainted with "dual" numbers. Perhaps that refers to base 2 (similar to how decimal refers to base 10)? Maybe I'll learn something new today. I like when I can do that.